{
  "pagination": {
    "limit": 20,
    "offset": 0,
    "first": "/v3/releases?module=puppetlabs-stdlib&limit=20&offset=0",
    "previous": null,
    "current": "/v3/releases?module=puppetlabs-stdlib&limit=20&offset=0",
    "next": "/v3/releases?module=puppetlabs-stdlib&limit=20&offset=20",
    "total": 90
  },
  "results": [
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.7.0",
      "slug": "puppetlabs-stdlib-9.7.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.7.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.7.0",
        "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",
              "12"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "18.04",
              "20.04",
              "22.04",
              "24.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"
            ]
          },
          {
            "operatingsystem": "AmazonLinux",
            "operatingsystemrelease": [
              "2",
              "2023"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 7.0.0 < 9.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "3.2.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "tags/3.2.0.4-0-g5d17ec1"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.7.0.tar.gz",
      "file_size": 161440,
      "file_md5": "5cdd6d85d10757868a5f2c44f7ed0d14",
      "file_sha256": "9c400b8ec321017d10720e1e02edf95794dea237100dff4a7e48e924b4e73262",
      "downloads": 100137,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [License](#license)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## License\n\nThis codebase is licensed under the Apache2.0 licensing, however due to the nature of the codebase the open source dependencies may also use a combination of [AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html), [BSD-2](https://opensource.org/license/bsd-2-claus), [BSD-3](https://opensource.org/license/bsd-3-claus), [GPL2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html), [LGPL](https://opensource.org/license/lgpl-3-0/), [MIT](https://opensource.org/license/mit/) and [MPL](https://opensource.org/license/mpl-2-0/) Licensing.\n\n## Development\n\nPuppet 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).\n\nTo 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).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.7.0) - 2024-12-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.6.0...v9.7.0)\n\n### Added\n\n- (CAT-2119) Add Ubuntu 24.04 support [#1440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1440) ([shubhamshinde360](https://github.com/shubhamshinde360))\n- (CAT-2101) Add support for Debian-12 [#1439](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1439) ([skyamgarp](https://github.com/skyamgarp))\n- Support for Amazon linux 2 and 2023 [#1427](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1427) ([h0tw1r3](https://github.com/h0tw1r3))\n\n### Fixed\n\n- (CAT-2180) Upgrade rexml to address CVE-2024-49761 [#1443](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1443) ([amitkarsale](https://github.com/amitkarsale))\n\n## [v9.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.6.0) - 2024-04-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.5.0...v9.6.0)\n\n### Added\n\n- Allow usage of file templates with stdlib::manage [#1422](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1422) ([tuxmea](https://github.com/tuxmea))\n\n## [v9.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.5.0) - 2024-03-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.1...v9.5.0)\n\n### Added\n\n- Add function stdlib::sort_by [#1384](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1384) ([XMol](https://github.com/XMol))\n\n### Fixed\n\n- (#1389) - pw_hash with bcrypt not working on puppet master [#1410](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1410) ([TuningYourCode](https://github.com/TuningYourCode))\n\n### Other\n\n- Deprecate `time` function [#1417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1417) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.4.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.1) - 2023-11-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.0...v9.4.1)\n\n### Fixed\n\n- Correct casing of Stdlib::IP::Address [#1406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1406) ([ekohl](https://github.com/ekohl))\n\n## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0)\n\n### Added\n\n- Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Changed\n\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([LadyNamedLaura](https://github.com/LadyNamedLaura))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`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.\n* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`stdlib::sort_by`](#stdlib--sort_by): Sort an Array, Hash or String by mapping values through a given block.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::time`](#stdlib--time): This function is deprecated. It implements the functionality of the original non-namespaced stdlib `time` function.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): DEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n  'create_resources'      => {\n    'file'                => {\n      '/etc/motd.d/hello' => {\n        'content'         => 'I say Hi',\n        'notify'          => 'Service[sshd]',\n      },\n      '/etc/motd'         => {\n        'ensure'          => 'file',\n        'epp'             => {\n          'template'      => 'profile/motd.epp',\n        }\n      },\n      '/etc/information'  => {\n        'ensure'          => 'file',\n        'erb'             => {\n          'template'      => 'profile/informaiton.erb',\n        }\n      }\n    },\n    'package'             => {\n      'example'           => {\n        'ensure'          => 'installed',\n        'subscribe'       => ['Service[sshd]', 'Exec[something]'],\n      }\n    }\n  }\n}\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n    '/etc/motd':\n      ensure: 'file'\n      epp:\n        template: 'profile/motd.epp'\n        context: {}\n    '/etc/information':\n      ensure: 'file'\n      erb:\n        template: 'profile/information.erb'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not directly evaluated\n      but processed as Puppet code based on epp and erb hash keys.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\n#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`\n\nThe deprecation function.\n\nReturns: `Any`\n\n##### `key`\n\nData type: `String`\n\nThe uniqueness key.  This function logs once for any given key.\n\n##### `message`\n\nData type: `String`\n\nIs the message text including any positional information that is formatted by the user/caller of the function.\n\n##### `use_strict_setting`\n\nData type: `Optional[Boolean]`\n\nWhen `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning).\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n\n#### `fqdn_rotate(Any *$args)`\n\nThe fqdn_rotate function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n##### `&block`\n\nData type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`\n\n\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[Optional[String]]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--fqdn_rotate\"></a>`stdlib::fqdn_rotate`\n\nType: Ruby 4.x API\n\nRotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.\n\n#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `String` Returns the rotated String\n\n##### Examples\n\n###### Rotating a String\n\n```puppet\nstdlib::fqdn_rotate('abcd')\n```\n\n###### Using a custom seed\n\n```puppet\nstdlib::fqdn_rotate('abcd', 'custom seed')\n```\n\n##### `input`\n\nData type: `String`\n\nThe String you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `Array` Returns the rotated Array\n\n##### Examples\n\n###### Rotating an Array\n\n```puppet\nstdlib::fqdn_rotate(['a', 'b', 'c', 'd'])\n```\n\n###### Using custom seeds\n\n```puppet\nstdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)\n```\n\n##### `input`\n\nData type: `Array`\n\nThe Array you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n### <a name=\"stdlib--has_function\"></a>`stdlib::has_function`\n\nType: Ruby 4.x API\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\n#### Examples\n\n##### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n#### `stdlib::has_function(String[1] $function_name)`\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\nReturns: `Boolean`\n\n##### Examples\n\n###### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n##### `function_name`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--nested_values\"></a>`stdlib::nested_values`\n\nType: Ruby 4.x API\n\nGet list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n#### `stdlib::nested_values(Hash $hash)`\n\nThe stdlib::nested_values function.\n\nReturns: `Array` All the values found in the input hash included those deeply nested.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n##### `hash`\n\nData type: `Hash`\n\nA (nested) hash\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--sort_by\"></a>`stdlib::sort_by`\n\nType: Ruby 4.x API\n\nSort an Array, Hash or String by mapping values through a given block.\n\n#### Examples\n\n##### Sort local devices according to their used space.\n\n```puppet\n$facts['mountpoints'].stdlib::sort_by |$m| { $m.dig(1, 'used_bytes') }\n```\n\n#### `stdlib::sort_by(Array $ary, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Array` Returns an ordered copy of ary.\n\n##### `ary`\n\nData type: `Array`\n\nThe Array to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of ary.\n\n#### `stdlib::sort_by(String $str, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `String` Returns an ordered copy of str.\n\n##### `str`\n\nData type: `String`\n\nThe String to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of str.\n\n#### `stdlib::sort_by(Hash $hsh, Variant[Callable[1,1], Callable[2,2]] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Hash` Returns an ordered copy of hsh.\n\n##### `hsh`\n\nData type: `Hash`\n\nThe Hash to sort.\n\n##### `&block`\n\nData type: `Variant[Callable[1,1], Callable[2,2]]`\n\nThe block for transforming elements of hsh.\nThe block may have arity of one or two.\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--time\"></a>`stdlib::time`\n\nType: Puppet Language\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\n#### `stdlib::time(Optional[String] $_timezone = undef)`\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\nReturns: `Integer`\n\n##### `_timezone`\n\nData type: `Optional[String]`\n\nThis parameter doesn't do anything, but exists for compatability reasons\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n\n#### `time(Any *$args)`\n\nThe time function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **DEPRECATED** Use Stdlib::Http::Status\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "NWNkZDZkODVkMTA3NTc4NjhhNWYyYzQ0ZjdlZDBkMTQ6MTczNDQxNzA2MQ==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/9c400b8ec321017d10720e1e02edf95794dea237100dff4a7e48e924b4e73262",
            "self": "https://www.virustotal.com/api/v3/analyses/NWNkZDZkODVkMTA3NTc4NjhhNWYyYzQ0ZjdlZDBkMTQ6MTczNDQxNzA2MQ=="
          },
          "attributes": {
            "date": 1734417061,
            "stats": {
              "failure": 0,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 61,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20241216",
                "engine_version": "23.9.8494.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20241216",
                "engine_version": "2.4.2022.1"
              },
              "CTX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CTX",
                "engine_update": "20241217",
                "engine_version": "2024.8.29.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20241216",
                "engine_version": "6.602"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20241216",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20241217",
                "engine_version": "12.207.54191"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20241216",
                "engine_version": "2.0.0.10"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20241216",
                "engine_version": "23.9.8494.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20241217",
                "engine_version": "8.3.3.20"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20241216",
                "engine_version": "4.0.2.0"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20241217",
                "engine_version": "7.0.65.5230"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20241217",
                "engine_version": "A:25.39467B:27.38559"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20241216",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20241216",
                "engine_version": "5.3.1"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20241216",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20241216",
                "engine_version": "9.5.852"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20241217",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20241216",
                "engine_version": "1.4.1.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20241217",
                "engine_version": "1734415278"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20241216",
                "engine_version": "6.3.23.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20241216",
                "engine_version": "8.16"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20241216",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20241217",
                "engine_version": "25.0.0.28"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20241216",
                "engine_version": "2.5.5.0"
              },
              "Varist": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Varist",
                "engine_update": "20241217",
                "engine_version": "6.6.1.3"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20241216",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20241216",
                "engine_version": "2.0.0.5258"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20240328",
                "engine_version": "1.2.0.121"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20241217",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20241205",
                "engine_version": "3.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20241212",
                "engine_version": "4.0.181"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20241217",
                "engine_version": "35.47.0.0"
              },
              "McAfeeD": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "McAfeeD",
                "engine_update": "20241217",
                "engine_version": "1.2.0.7977"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20241213",
                "engine_version": "2.25.10.0"
              },
              "Skyhigh": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Skyhigh",
                "engine_update": "20241216",
                "engine_version": "v2021.2.0+4045"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20241217",
                "engine_version": "2024-12-17.01"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20241217",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20241217",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20240910",
                "engine_version": "1.9.0.8"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20241216",
                "engine_version": "37308"
              },
              "huorong": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "huorong",
                "engine_update": "20241216",
                "engine_version": "200e688:200e688:760bebb:760bebb"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20241217",
                "engine_version": null
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20241217",
                "engine_version": "2024.1.0.53752"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20241217",
                "engine_version": "18.10.1547.307"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20241217",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20241216",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20241211",
                "engine_version": "None"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20241217",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20241217",
                "engine_version": "1.22.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20241202",
                "engine_version": "4.0.3.0"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20241217",
                "engine_version": "3.26.2.10521"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20241217",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20241217",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20241216",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20241217",
                "engine_version": "1.1.24090.11"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20241217",
                "engine_version": "1.0"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20241217",
                "engine_version": "30393"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20241217",
                "engine_version": "1.0.200.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20241217",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20241217",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CrowdStrike",
                "engine_update": "20230417",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20241216",
                "engine_version": "12.207.54189"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20240417",
                "engine_version": "24.2.1.1"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20241216",
                "engine_version": "241216-02"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20241208",
                "engine_version": "5.0.0.8"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20241217",
                "engine_version": "4.5.5.54"
              },
              "alibabacloud": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "alibabacloud",
                "engine_update": "20241030",
                "engine_version": "2.2.0"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20241216",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20241216",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20241203",
                "engine_version": "2.0.936"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20241217",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20241216",
                "engine_version": "5.6.0.1032"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20241216",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20241111",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "5cdd6d85d10757868a5f2c44f7ed0d14",
            "sha1": "ddb7d53fd9e5fcdb36143454c3f0fbb33df8cb30",
            "size": 161440,
            "sha256": "9c400b8ec321017d10720e1e02edf95794dea237100dff4a7e48e924b4e73262"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2024-12-16 22:30:06 -0800",
      "updated_at": "2024-12-16 22:31:14 -0800",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.6.0",
      "slug": "puppetlabs-stdlib-9.6.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.6.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.6.0",
        "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": "3.0.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g79a2f93"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.6.0.tar.gz",
      "file_size": 166427,
      "file_md5": "ceb3831ec0117b16119de8eb01a10d1f",
      "file_sha256": "a5958044aa25751db067293117079fa189d6801eef33b968a1dc50550dec4b6f",
      "downloads": 84780,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [License](#license)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## License\n\nThis codebase is licensed under the Apache2.0 licensing, however due to the nature of the codebase the open source dependencies may also use a combination of [AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html), [BSD-2](https://opensource.org/license/bsd-2-claus), [BSD-3](https://opensource.org/license/bsd-3-claus), [GPL2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html), [LGPL](https://opensource.org/license/lgpl-3-0/), [MIT](https://opensource.org/license/mit/) and [MPL](https://opensource.org/license/mpl-2-0/) Licensing.\n\n## Development\n\nPuppet 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).\n\nTo 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).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.6.0) - 2024-04-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.5.0...v9.6.0)\n\n### Added\n\n- Allow usage of file templates with stdlib::manage [#1422](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1422) ([tuxmea](https://github.com/tuxmea))\n\n## [v9.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.5.0) - 2024-03-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.1...v9.5.0)\n\n### Added\n\n- Add function stdlib::sort_by [#1384](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1384) ([XMol](https://github.com/XMol))\n\n### Fixed\n\n- (#1389) - pw_hash with bcrypt not working on puppet master [#1410](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1410) ([TuningYourCode](https://github.com/TuningYourCode))\n\n### Other\n\n- Deprecate `time` function [#1417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1417) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.4.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.1) - 2023-11-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.0...v9.4.1)\n\n### Fixed\n\n- Correct casing of Stdlib::IP::Address [#1406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1406) ([ekohl](https://github.com/ekohl))\n\n## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0)\n\n### Added\n\n- Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([LadyNamedLaura](https://github.com/LadyNamedLaura))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n- 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))\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`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.\n* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`stdlib::sort_by`](#stdlib--sort_by): Sort an Array, Hash or String by mapping values through a given block.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::time`](#stdlib--time): This function is deprecated. It implements the functionality of the original non-namespaced stdlib `time` function.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): DEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n  'create_resources'      => {\n    'file'                => {\n      '/etc/motd.d/hello' => {\n        'content'         => 'I say Hi',\n        'notify'          => 'Service[sshd]',\n      },\n      '/etc/motd'         => {\n        'ensure'          => 'file',\n        'epp'             => {\n          'template'      => 'profile/motd.epp',\n        }\n      },\n      '/etc/information'  => {\n        'ensure'          => 'file',\n        'erb'             => {\n          'template'      => 'profile/informaiton.erb',\n        }\n      }\n    },\n    'package'             => {\n      'example'           => {\n        'ensure'          => 'installed',\n        'subscribe'       => ['Service[sshd]', 'Exec[something]'],\n      }\n    }\n  }\n}\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n    '/etc/motd':\n      ensure: 'file'\n      epp:\n        template: 'profile/motd.epp'\n        context: {}\n    '/etc/information':\n      ensure: 'file'\n      erb:\n        template: 'profile/information.erb'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not directly evaluated\n      but processed as Puppet code based on epp and erb hash keys.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\n#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`\n\nThe deprecation function.\n\nReturns: `Any`\n\n##### `key`\n\nData type: `String`\n\nThe uniqueness key.  This function logs once for any given key.\n\n##### `message`\n\nData type: `String`\n\nIs the message text including any positional information that is formatted by the user/caller of the function.\n\n##### `use_strict_setting`\n\nData type: `Optional[Boolean]`\n\nWhen `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning).\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n\n#### `fqdn_rotate(Any *$args)`\n\nThe fqdn_rotate function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n##### `&block`\n\nData type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`\n\n\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[Optional[String]]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--fqdn_rotate\"></a>`stdlib::fqdn_rotate`\n\nType: Ruby 4.x API\n\nRotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.\n\n#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `String` Returns the rotated String\n\n##### Examples\n\n###### Rotating a String\n\n```puppet\nstdlib::fqdn_rotate('abcd')\n```\n\n###### Using a custom seed\n\n```puppet\nstdlib::fqdn_rotate('abcd', 'custom seed')\n```\n\n##### `input`\n\nData type: `String`\n\nThe String you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `Array` Returns the rotated Array\n\n##### Examples\n\n###### Rotating an Array\n\n```puppet\nstdlib::fqdn_rotate(['a', 'b', 'c', 'd'])\n```\n\n###### Using custom seeds\n\n```puppet\nstdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)\n```\n\n##### `input`\n\nData type: `Array`\n\nThe Array you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n### <a name=\"stdlib--has_function\"></a>`stdlib::has_function`\n\nType: Ruby 4.x API\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\n#### Examples\n\n##### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n#### `stdlib::has_function(String[1] $function_name)`\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\nReturns: `Boolean`\n\n##### Examples\n\n###### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n##### `function_name`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--nested_values\"></a>`stdlib::nested_values`\n\nType: Ruby 4.x API\n\nGet list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n#### `stdlib::nested_values(Hash $hash)`\n\nThe stdlib::nested_values function.\n\nReturns: `Array` All the values found in the input hash included those deeply nested.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n##### `hash`\n\nData type: `Hash`\n\nA (nested) hash\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--sort_by\"></a>`stdlib::sort_by`\n\nType: Ruby 4.x API\n\nSort an Array, Hash or String by mapping values through a given block.\n\n#### Examples\n\n##### Sort local devices according to their used space.\n\n```puppet\n$facts['mountpoints'].stdlib::sort_by |$m| { $m.dig(1, 'used_bytes') }\n```\n\n#### `stdlib::sort_by(Array $ary, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Array` Returns an ordered copy of ary.\n\n##### `ary`\n\nData type: `Array`\n\nThe Array to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of ary.\n\n#### `stdlib::sort_by(String $str, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `String` Returns an ordered copy of str.\n\n##### `str`\n\nData type: `String`\n\nThe String to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of str.\n\n#### `stdlib::sort_by(Hash $hsh, Variant[Callable[1,1], Callable[2,2]] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Hash` Returns an ordered copy of hsh.\n\n##### `hsh`\n\nData type: `Hash`\n\nThe Hash to sort.\n\n##### `&block`\n\nData type: `Variant[Callable[1,1], Callable[2,2]]`\n\nThe block for transforming elements of hsh.\nThe block may have arity of one or two.\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--time\"></a>`stdlib::time`\n\nType: Puppet Language\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\n#### `stdlib::time(Optional[String] $_timezone = undef)`\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\nReturns: `Integer`\n\n##### `_timezone`\n\nData type: `Optional[String]`\n\nThis parameter doesn't do anything, but exists for compatability reasons\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n\n#### `time(Any *$args)`\n\nThe time function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **DEPRECATED** Use Stdlib::Http::Status\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "Y2ViMzgzMWVjMDExN2IxNjExOWRlOGViMDFhMTBkMWY6MTcxMjEzMzIwMQ==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/a5958044aa25751db067293117079fa189d6801eef33b968a1dc50550dec4b6f",
            "self": "https://www.virustotal.com/api/v3/analyses/Y2ViMzgzMWVjMDExN2IxNjExOWRlOGViMDFhMTBkMWY6MTcxMjEzMzIwMQ=="
          },
          "attributes": {
            "date": 1712133201,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 60,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20240403",
                "engine_version": "23.9.8494.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20240328",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20240403",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20240401",
                "engine_version": "6.517"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20240403",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20240403",
                "engine_version": "12.151.51580"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20240403",
                "engine_version": "2.0.0.10"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20240403",
                "engine_version": "23.9.8494.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20240403",
                "engine_version": "8.3.3.18"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20240403",
                "engine_version": "4.0.1.1"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20240403",
                "engine_version": "7.0.62.1180"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20240403",
                "engine_version": "A:25.37695B:27.35505"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20240402",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20240402",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20240402",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20240402",
                "engine_version": "9.5.674"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20240403",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20240402",
                "engine_version": "1.3.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20240403",
                "engine_version": "1712129430"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20240402",
                "engine_version": "6.3.12.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20240403",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20240402",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20240403",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20240403",
                "engine_version": "2.4.3.0"
              },
              "Varist": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Varist",
                "engine_update": "20240403",
                "engine_version": "6.5.1.2"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20240403",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20240403",
                "engine_version": "2.0.0.5085"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20240328",
                "engine_version": "1.2.0.121"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20240403",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20240328",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20240401",
                "engine_version": "4.0.140"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20240403",
                "engine_version": "35.47.0.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20240402",
                "engine_version": "2.23.0.0"
              },
              "Skyhigh": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Skyhigh",
                "engine_update": "20240402",
                "engine_version": "v2021.2.0+4045"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20240403",
                "engine_version": "2024-04-03.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20240403",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20240403",
                "engine_version": "2014.3.20.0"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20240403",
                "engine_version": "36578"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20240403",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20240403",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20240403",
                "engine_version": "18.10.1547.307"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20240403",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20240402",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20230906",
                "engine_version": "None"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20240403",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20240403",
                "engine_version": "1.21.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20240223",
                "engine_version": "4.0.16.96"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20240403",
                "engine_version": "3.25.1.10473"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20240403",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20240403",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20240403",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20240403",
                "engine_version": "1.1.24030.4"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20240403",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20240403",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20240304",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20240402",
                "engine_version": "28996"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20240403",
                "engine_version": "1.0.170.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20240403",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20240403",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20231026",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20240403",
                "engine_version": "12.151.51579"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20240129",
                "engine_version": "24.1.0.5"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20240402",
                "engine_version": "240402-04"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20240326",
                "engine_version": "5.0.0.8"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20240403",
                "engine_version": "4.5.5.54"
              },
              "alibabacloud": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "alibabacloud",
                "engine_update": "20240402",
                "engine_version": "2.0.3"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20240402",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20240403",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20240128",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20240305",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20240403",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20240403",
                "engine_version": "5.6.0.1032"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20240403",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20240103",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "ceb3831ec0117b16119de8eb01a10d1f",
            "sha1": "eb0d2a6c38f78a73b32102b5e88815088d475d54",
            "size": 166427,
            "sha256": "a5958044aa25751db067293117079fa189d6801eef33b968a1dc50550dec4b6f"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2024-04-03 01:32:12 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.5.0",
      "slug": "puppetlabs-stdlib-9.5.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.5.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.5.0",
        "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": "3.0.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g79a2f93"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.5.0.tar.gz",
      "file_size": 165653,
      "file_md5": "e43f2d0a724cf2d1ae4b1a706023631f",
      "file_sha256": "2f15b490e78f82812532eb13222a584a0b7f65c638f60bd82d644f9f4e6105c2",
      "downloads": 13562,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [License](#license)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## License\n\nThis codebase is licensed under the Apache2.0 licensing, however due to the nature of the codebase the open source dependencies may also use a combination of [AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html), [BSD-2](https://opensource.org/license/bsd-2-claus), [BSD-3](https://opensource.org/license/bsd-3-claus), [GPL2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html), [LGPL](https://opensource.org/license/lgpl-3-0/), [MIT](https://opensource.org/license/mit/) and [MPL](https://opensource.org/license/mpl-2-0/) Licensing.\n\n## Development\n\nPuppet 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).\n\nTo 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).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.5.0) - 2024-03-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.1...v9.5.0)\n\n### Added\n\n- Add function stdlib::sort_by [#1384](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1384) ([XMol](https://github.com/XMol))\n\n### Fixed\n\n- (#1389) - pw_hash with bcrypt not working on puppet master [#1410](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1410) ([TuningYourCode](https://github.com/TuningYourCode))\n\n### Other\n\n- Deprecate `time` function [#1417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1417) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.4.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.1) - 2023-11-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.0...v9.4.1)\n\n### Fixed\n\n- Correct casing of Stdlib::IP::Address [#1406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1406) ([ekohl](https://github.com/ekohl))\n\n## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0)\n\n### Added\n\n- Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([LadyNamedLaura](https://github.com/LadyNamedLaura))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n- 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))\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`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.\n* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`stdlib::sort_by`](#stdlib--sort_by): Sort an Array, Hash or String by mapping values through a given block.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::time`](#stdlib--time): This function is deprecated. It implements the functionality of the original non-namespaced stdlib `time` function.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): DEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\n#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`\n\nThe deprecation function.\n\nReturns: `Any`\n\n##### `key`\n\nData type: `String`\n\nThe uniqueness key.  This function logs once for any given key.\n\n##### `message`\n\nData type: `String`\n\nIs the message text including any positional information that is formatted by the user/caller of the function.\n\n##### `use_strict_setting`\n\nData type: `Optional[Boolean]`\n\nWhen `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning).\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n\n#### `fqdn_rotate(Any *$args)`\n\nThe fqdn_rotate function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n##### `&block`\n\nData type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`\n\n\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[Optional[String]]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--fqdn_rotate\"></a>`stdlib::fqdn_rotate`\n\nType: Ruby 4.x API\n\nRotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.\n\n#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `String` Returns the rotated String\n\n##### Examples\n\n###### Rotating a String\n\n```puppet\nstdlib::fqdn_rotate('abcd')\n```\n\n###### Using a custom seed\n\n```puppet\nstdlib::fqdn_rotate('abcd', 'custom seed')\n```\n\n##### `input`\n\nData type: `String`\n\nThe String you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `Array` Returns the rotated Array\n\n##### Examples\n\n###### Rotating an Array\n\n```puppet\nstdlib::fqdn_rotate(['a', 'b', 'c', 'd'])\n```\n\n###### Using custom seeds\n\n```puppet\nstdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)\n```\n\n##### `input`\n\nData type: `Array`\n\nThe Array you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n### <a name=\"stdlib--has_function\"></a>`stdlib::has_function`\n\nType: Ruby 4.x API\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\n#### Examples\n\n##### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n#### `stdlib::has_function(String[1] $function_name)`\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\nReturns: `Boolean`\n\n##### Examples\n\n###### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n##### `function_name`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--nested_values\"></a>`stdlib::nested_values`\n\nType: Ruby 4.x API\n\nGet list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n#### `stdlib::nested_values(Hash $hash)`\n\nThe stdlib::nested_values function.\n\nReturns: `Array` All the values found in the input hash included those deeply nested.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n##### `hash`\n\nData type: `Hash`\n\nA (nested) hash\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--sort_by\"></a>`stdlib::sort_by`\n\nType: Ruby 4.x API\n\nSort an Array, Hash or String by mapping values through a given block.\n\n#### Examples\n\n##### Sort local devices according to their used space.\n\n```puppet\n$facts['mountpoints'].stdlib::sort_by |$m| { $m.dig(1, 'used_bytes') }\n```\n\n#### `stdlib::sort_by(Array $ary, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Array` Returns an ordered copy of ary.\n\n##### `ary`\n\nData type: `Array`\n\nThe Array to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of ary.\n\n#### `stdlib::sort_by(String $str, Callable[1,1] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `String` Returns an ordered copy of str.\n\n##### `str`\n\nData type: `String`\n\nThe String to sort.\n\n##### `&block`\n\nData type: `Callable[1,1]`\n\nThe block for transforming elements of str.\n\n#### `stdlib::sort_by(Hash $hsh, Variant[Callable[1,1], Callable[2,2]] &$block)`\n\nThe stdlib::sort_by function.\n\nReturns: `Hash` Returns an ordered copy of hsh.\n\n##### `hsh`\n\nData type: `Hash`\n\nThe Hash to sort.\n\n##### `&block`\n\nData type: `Variant[Callable[1,1], Callable[2,2]]`\n\nThe block for transforming elements of hsh.\nThe block may have arity of one or two.\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--time\"></a>`stdlib::time`\n\nType: Puppet Language\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\n#### `stdlib::time(Optional[String] $_timezone = undef)`\n\nIt is provided for compatability, but users should use the native time related functions directly.\n\nReturns: `Integer`\n\n##### `_timezone`\n\nData type: `Optional[String]`\n\nThis parameter doesn't do anything, but exists for compatability reasons\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the native Puppet fuctionality instead of this function. eg `Integer(Timestamp().strftime('%s'))`\n\n#### `time(Any *$args)`\n\nThe time function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **DEPRECATED** Use Stdlib::Http::Status\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "ZTQzZjJkMGE3MjRjZjJkMWFlNGIxYTcwNjAyMzYzMWY6MTcxMDE2MjU5Nw==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/2f15b490e78f82812532eb13222a584a0b7f65c638f60bd82d644f9f4e6105c2",
            "self": "https://www.virustotal.com/api/v3/analyses/ZTQzZjJkMGE3MjRjZjJkMWFlNGIxYTcwNjAyMzYzMWY6MTcxMDE2MjU5Nw=="
          },
          "attributes": {
            "date": 1710162597,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 60,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20240311",
                "engine_version": "23.9.8494.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20240129",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20240311",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20240310",
                "engine_version": "6.509"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20240311",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20240311",
                "engine_version": "12.148.51334"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20240311",
                "engine_version": "2.0.0.8"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20240311",
                "engine_version": "23.9.8494.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20240311",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20240311",
                "engine_version": "4.0.0.29"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20240311",
                "engine_version": "7.0.62.1180"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20240311",
                "engine_version": "A:25.37535B:27.35236"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20240311",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20240311",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20240311",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20240308",
                "engine_version": "9.5.657"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20240311",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20240311",
                "engine_version": "1.3.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20240311",
                "engine_version": "1710156691"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20240311",
                "engine_version": "6.3.12.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20240311",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20240311",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20240311",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20240311",
                "engine_version": "2.4.3.0"
              },
              "Varist": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Varist",
                "engine_update": "20240311",
                "engine_version": "6.5.1.2"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20240311",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20240308",
                "engine_version": "2.0.0.5067"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230828",
                "engine_version": "1.2.0.121"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20240311",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20240307",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20240223",
                "engine_version": "4.0.132"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20240311",
                "engine_version": "35.47.0.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20240305",
                "engine_version": "2.23.0.0"
              },
              "Skyhigh": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Skyhigh",
                "engine_update": "20240310",
                "engine_version": "v2021.2.0+4045"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20240311",
                "engine_version": "2024-03-11.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20240311",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20240311",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20240311",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20240311",
                "engine_version": "36513"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20240311",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20240311",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20240311",
                "engine_version": "18.10.1547.307"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20240311",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20240310",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20230906",
                "engine_version": "None"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20240311",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20240310",
                "engine_version": "1.21.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20240223",
                "engine_version": "4.0.16.96"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20240311",
                "engine_version": "3.25.1.10473"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20240311",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20240311",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20240311",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20240311",
                "engine_version": "1.1.24020.9"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20240311",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20240306",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20240304",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20240311",
                "engine_version": "28875"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20240311",
                "engine_version": "1.0.168.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20240311",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20240311",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20231026",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20240311",
                "engine_version": "12.147.51332"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20240129",
                "engine_version": "24.1.0.5"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20240311",
                "engine_version": "240311-02"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20240306",
                "engine_version": "5.0.0.8"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20240311",
                "engine_version": "4.5.5.54"
              },
              "alibabacloud": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "alibabacloud",
                "engine_update": "20240115",
                "engine_version": "2.0.3"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20240310",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20240311",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20240128",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20240305",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20240311",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20240311",
                "engine_version": "5.6.0.1032"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20240311",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20240103",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "e43f2d0a724cf2d1ae4b1a706023631f",
            "sha1": "25b2ccc35d80b048b235794d0f486e7113433a8a",
            "size": 165653,
            "sha256": "2f15b490e78f82812532eb13222a584a0b7f65c638f60bd82d644f9f4e6105c2"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2024-03-11 06:08:57 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.4.1",
      "slug": "puppetlabs-stdlib-9.4.1",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.4.1",
      "metadata": {
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.4.1.tar.gz",
      "file_size": 161699,
      "file_md5": "372647a7e06a6065de51ef1745c0a115",
      "file_sha256": "2498431032871bd30e600d515e7b4f412962e409fbf60333104295a62d79cd80",
      "downloads": 44874,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo 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).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.4.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.1) - 2023-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.0...v9.4.1)\n\n### Fixed\n\n- Correct casing of Stdlib::IP::Address [#1406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1406) ([ekohl](https://github.com/ekohl))\n\n## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0)\n\n### Added\n\n- Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher))\n\n### Other\n\n- Remove unused parser deprecation function [#1392](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1392) ([ekohl](https://github.com/ekohl))\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`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.\n* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\n#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`\n\nThe deprecation function.\n\nReturns: `Any`\n\n##### `key`\n\nData type: `String`\n\nThe uniqueness key.  This function logs once for any given key.\n\n##### `message`\n\nData type: `String`\n\nIs the message text including any positional information that is formatted by the user/caller of the function.\n\n##### `use_strict_setting`\n\nData type: `Optional[Boolean]`\n\nWhen `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning).\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n\n#### `fqdn_rotate(Any *$args)`\n\nThe fqdn_rotate function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n##### `&block`\n\nData type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`\n\n\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[Optional[String]]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--fqdn_rotate\"></a>`stdlib::fqdn_rotate`\n\nType: Ruby 4.x API\n\nRotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.\n\n#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `String` Returns the rotated String\n\n##### Examples\n\n###### Rotating a String\n\n```puppet\nstdlib::fqdn_rotate('abcd')\n```\n\n###### Using a custom seed\n\n```puppet\nstdlib::fqdn_rotate('abcd', 'custom seed')\n```\n\n##### `input`\n\nData type: `String`\n\nThe String you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `Array` Returns the rotated Array\n\n##### Examples\n\n###### Rotating an Array\n\n```puppet\nstdlib::fqdn_rotate(['a', 'b', 'c', 'd'])\n```\n\n###### Using custom seeds\n\n```puppet\nstdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)\n```\n\n##### `input`\n\nData type: `Array`\n\nThe Array you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n### <a name=\"stdlib--has_function\"></a>`stdlib::has_function`\n\nType: Ruby 4.x API\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\n#### Examples\n\n##### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n#### `stdlib::has_function(String[1] $function_name)`\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\nReturns: `Boolean`\n\n##### Examples\n\n###### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n##### `function_name`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--nested_values\"></a>`stdlib::nested_values`\n\nType: Ruby 4.x API\n\nGet list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n#### `stdlib::nested_values(Hash $hash)`\n\nThe stdlib::nested_values function.\n\nReturns: `Array` All the values found in the input hash included those deeply nested.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n##### `hash`\n\nData type: `Hash`\n\nA (nested) hash\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **DEPRECATED** Use Stdlib::Http::Status\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "MzcyNjQ3YTdlMDZhNjA2NWRlNTFlZjE3NDVjMGExMTU6MTcwNjA3NDUwNg==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/2498431032871bd30e600d515e7b4f412962e409fbf60333104295a62d79cd80",
            "self": "https://www.virustotal.com/api/v3/analyses/MzcyNjQ3YTdlMDZhNjA2NWRlNTFlZjE3NDVjMGExMTU6MTcwNjA3NDUwNg=="
          },
          "attributes": {
            "date": 1706074506,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 58,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20240124",
                "engine_version": "23.9.8494.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20240106",
                "engine_version": "2.4.2022.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20240122",
                "engine_version": "6.492"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20240124",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20240124",
                "engine_version": "12.138.50834"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20240124",
                "engine_version": "2.0.0.8"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20240124",
                "engine_version": "23.9.8494.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20240124",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20240124",
                "engine_version": "4.0.0.28"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20240124",
                "engine_version": "7.0.61.8090"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20240124",
                "engine_version": "A:25.37222B:27.34674"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20240123",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20240123",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20240123",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20240123",
                "engine_version": "9.5.624"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20240124",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20240123",
                "engine_version": "1.2.1.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20240124",
                "engine_version": "1706070658"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20240123",
                "engine_version": "6.2.4.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20240124",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20240124",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20240124",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20240124",
                "engine_version": "2.4.3.0"
              },
              "Varist": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Varist",
                "engine_update": "20240124",
                "engine_version": "6.5.1.2"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20240123",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20240122",
                "engine_version": "2.0.0.5038"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230828",
                "engine_version": "1.2.0.121"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20240124",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20240103",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20240115",
                "engine_version": "4.0.125"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20240124",
                "engine_version": "35.47.0.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20240123",
                "engine_version": "2.23.0.0"
              },
              "Skyhigh": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Skyhigh",
                "engine_update": "20240123",
                "engine_version": "v2021.2.0+4045"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20240124",
                "engine_version": "2024-01-24.01"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20240124",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20240124",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20240124",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20240123",
                "engine_version": "36373"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20240124",
                "engine_version": null
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20240124",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20240124",
                "engine_version": "18.10.1547.307"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20240124",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20240124",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20230906",
                "engine_version": "None"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20240124",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20240124",
                "engine_version": "1.21.0.0"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20240124",
                "engine_version": "3.25.0.10459"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20240124",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20240124",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20240123",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20240124",
                "engine_version": "1.1.23110.2"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20240124",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20240124",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20231102",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20240124",
                "engine_version": "28620"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20240124",
                "engine_version": "1.0.155.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20240124",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20240124",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": null,
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20240124",
                "engine_version": "12.138.50834"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20231119",
                "engine_version": "23.4.2.3"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20240123",
                "engine_version": "240123-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20240122",
                "engine_version": "5.0.0.8"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20240124",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20240123",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20240123",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20240108",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20240103",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20240124",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20240124",
                "engine_version": "5.6.0.1032"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20240124",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20240103",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "372647a7e06a6065de51ef1745c0a115",
            "sha1": "5de646e2701a13f60675f939ffb5f43dbf78fc99",
            "size": 161699,
            "sha256": "2498431032871bd30e600d515e7b4f412962e409fbf60333104295a62d79cd80"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-11-09 08:49:15 -0800",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.4.0",
      "slug": "puppetlabs-stdlib-9.4.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.4.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.4.0",
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.4.0.tar.gz",
      "file_size": 162679,
      "file_md5": "8e25d12c88f79817c65ed6f77b1b315a",
      "file_sha256": "71c53f1c51f4554a54472b1ae32d6102a30cf87bf1742dc5244b3ed375633ee5",
      "downloads": 18863,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo 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).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0)\n\n### Added\n\n- Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher))\n\n### Other\n\n- Remove unused parser deprecation function [#1392](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1392) ([ekohl](https://github.com/ekohl))\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`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.\n* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\n#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`\n\nThe deprecation function.\n\nReturns: `Any`\n\n##### `key`\n\nData type: `String`\n\nThe uniqueness key.  This function logs once for any given key.\n\n##### `message`\n\nData type: `String`\n\nIs the message text including any positional information that is formatted by the user/caller of the function.\n\n##### `use_strict_setting`\n\nData type: `Optional[Boolean]`\n\nWhen `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning).\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.\n\n#### `fqdn_rotate(Any *$args)`\n\nThe fqdn_rotate function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n##### `&block`\n\nData type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`\n\n\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, undef, 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[Optional[String]]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--fqdn_rotate\"></a>`stdlib::fqdn_rotate`\n\nType: Ruby 4.x API\n\nRotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.\n\n#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `String` Returns the rotated String\n\n##### Examples\n\n###### Rotating a String\n\n```puppet\nstdlib::fqdn_rotate('abcd')\n```\n\n###### Using a custom seed\n\n```puppet\nstdlib::fqdn_rotate('abcd', 'custom seed')\n```\n\n##### `input`\n\nData type: `String`\n\nThe String you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`\n\nThe stdlib::fqdn_rotate function.\n\nReturns: `Array` Returns the rotated Array\n\n##### Examples\n\n###### Rotating an Array\n\n```puppet\nstdlib::fqdn_rotate(['a', 'b', 'c', 'd'])\n```\n\n###### Using custom seeds\n\n```puppet\nstdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)\n```\n\n##### `input`\n\nData type: `Array`\n\nThe Array you want rotated a random number of times\n\n##### `*seeds`\n\nData type: `Optional[Variant[Integer,String]]`\n\nOne of more values to use as a custom seed. These will be combined with the host's FQDN\n\n### <a name=\"stdlib--has_function\"></a>`stdlib::has_function`\n\nType: Ruby 4.x API\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\n#### Examples\n\n##### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n#### `stdlib::has_function(String[1] $function_name)`\n\nDetermines whether the Puppet runtime has access to a function by the\nname provided.\n\nReturns: `Boolean`\n\n##### Examples\n\n###### Using stdlib::has_function()\n\n```puppet\nstdlib::has_function('stdlib::has_function') # true\nstdlib::has_function('not_a_function') # false\n```\n\n##### `function_name`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--nested_values\"></a>`stdlib::nested_values`\n\nType: Ruby 4.x API\n\nGet list of nested values from given hash\nThis function will return list of nested Hash values and returns list of values in form of Array\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n#### `stdlib::nested_values(Hash $hash)`\n\nThe stdlib::nested_values function.\n\nReturns: `Array` All the values found in the input hash included those deeply nested.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"},\n  \"key3\" => \"value3\"\n}\n$data = $hash.stdlib::nested_values\n#Output : [\"value1\", \"value2.1\", \"value3\"]\n```\n\n##### `hash`\n\nData type: `Hash`\n\nA (nested) hash\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Ip::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **DEPRECATED** Use Stdlib::Http::Status\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "OGUyNWQxMmM4OGY3OTgxN2M2NWVkNmY3N2IxYjMxNWE6MTY5NTk4NDc4Mg==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/71c53f1c51f4554a54472b1ae32d6102a30cf87bf1742dc5244b3ed375633ee5",
            "self": "https://www.virustotal.com/api/v3/analyses/OGUyNWQxMmM4OGY3OTgxN2M2NWVkNmY3N2IxYjMxNWE6MTY5NTk4NDc4Mg=="
          },
          "attributes": {
            "date": 1695984782,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 59,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230929",
                "engine_version": "23.9.8494.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230822",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230929",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230928",
                "engine_version": "6.459"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230929",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230929",
                "engine_version": "12.116.49740"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230929",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230929",
                "engine_version": "23.9.8494.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230929",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230929",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230929",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230929",
                "engine_version": "7.0.61.8090"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230929",
                "engine_version": "A:25.36573B:27.33313"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230928",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230928",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230928",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230928",
                "engine_version": "9.5.546"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230929",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230929",
                "engine_version": "1.2.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230929",
                "engine_version": "1695978180"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230929",
                "engine_version": "6.2.4.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230929",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230929",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230929",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230929",
                "engine_version": "2.3.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230929",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230929",
                "engine_version": "2.0.0.4965"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230828",
                "engine_version": "1.2.0.121"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230929",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230927",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230928",
                "engine_version": "4.0.109"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230929",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230926",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230929",
                "engine_version": "2023-09-29.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20230929",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230928",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230929",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230929",
                "engine_version": "36041"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230929",
                "engine_version": "v0.1.4-109-g76614fd"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230929",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230929",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230929",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230928",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20230906",
                "engine_version": "2023.8.30.1"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230929",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230929",
                "engine_version": "1.20.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230907",
                "engine_version": "4.0.14.91"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230929",
                "engine_version": "3.24.0.10447"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230929",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230929",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230929",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230929",
                "engine_version": "1.1.23080.2005"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230929",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230929",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20230927",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230929",
                "engine_version": "27987"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230929",
                "engine_version": "1.0.140.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230929",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230929",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230929",
                "engine_version": "12.116.49742"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230705",
                "engine_version": "23.3.0.3"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230929",
                "engine_version": "230929-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230918",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230929",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230928",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230929",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230921",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230928",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230929",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230926",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230929",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230929",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "8e25d12c88f79817c65ed6f77b1b315a",
            "sha1": "9a64e74dbc658fcacafa63d7bb31431d8071690a",
            "size": 162679,
            "sha256": "71c53f1c51f4554a54472b1ae32d6102a30cf87bf1742dc5244b3ed375633ee5"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-09-29 03:52:01 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.3.0",
      "slug": "puppetlabs-stdlib-9.3.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.3.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.3.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.3.0.tar.gz",
      "file_size": 162466,
      "file_md5": "9601457e0c7c39f6f5295a5d799c8c59",
      "file_sha256": "9073568f2db90cd737e19bd13760b4a11427c3b9b531d1162ccc96ad45a9aed9",
      "downloads": 25174,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-07-31\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0)\n\n### Added\n\n- Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil))\n\n### Fixed\n\n- Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil))\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n- MODULES-6106: Fix broken `.sync.yml` [#854](https://github.com/puppetlabs/puppetlabs-stdlib/pull/854) ([](https://github.com/))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- [MODULES-2370] file_line.rb: Fix `line` attribute validation [#585](https://github.com/puppetlabs/puppetlabs-stdlib/pull/585) ([](https://github.com/))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n- [MODULES-2370] allow `match` parameter to influence `ensure => absent` behavior. [#499](https://github.com/puppetlabs/puppetlabs-stdlib/pull/499) ([](https://github.com/))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`nested_values`](#nested_values): This function will return list of Hash values, the return value will be Array NOTE : This function is expecting only Hash and return value wi\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"nested_values\"></a>`nested_values`\n\nType: Ruby 4.x API\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\n#### Examples\n\n##### :\n\n```puppet\n\n```\n\n#### `nested_values(Hash $options)`\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\nReturns: `Array`\n\n##### Examples\n\n###### :\n\n```puppet\n\n```\n\n##### `options`\n\nData type: `Hash`\n\n\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[String] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[String]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Ip::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "OTYwMTQ1N2UwYzdjMzlmNmY1Mjk1YTVkNzk5YzhjNTk6MTY5MDg3ODg4Mg==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/9073568f2db90cd737e19bd13760b4a11427c3b9b531d1162ccc96ad45a9aed9",
            "self": "https://www.virustotal.com/api/v3/analyses/OTYwMTQ1N2UwYzdjMzlmNmY1Mjk1YTVkNzk5YzhjNTk6MTY5MDg3ODg4Mg=="
          },
          "attributes": {
            "date": 1690878882,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 58,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230801",
                "engine_version": "22.11.7701.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230619",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230801",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230731",
                "engine_version": "6.438"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230801",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230801",
                "engine_version": "12.104.49137"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230801",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230801",
                "engine_version": "22.11.7701.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230801",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230801",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230801",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230801",
                "engine_version": "7.0.60.6220"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230801",
                "engine_version": "A:25.36298B:27.32619"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230731",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230731",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230731",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230731",
                "engine_version": "9.5.502"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230801",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230731",
                "engine_version": "1.1.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230801",
                "engine_version": "1690876826"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230731",
                "engine_version": "6.1.14.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230801",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230801",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230801",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230801",
                "engine_version": "2.3.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230801",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230731",
                "engine_version": "2.0.0.4925"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230727",
                "engine_version": "1.2.0.119"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230801",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230726",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230725",
                "engine_version": "4.0.101"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230801",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230724",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230801",
                "engine_version": "2023-08-01.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20230801",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230801",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230801",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230801",
                "engine_version": "35874"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230801",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230801",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230801",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230801",
                "engine_version": "None"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230731",
                "engine_version": "16.0.100"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230801",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230801",
                "engine_version": "1.20.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230718",
                "engine_version": "4.0.14.90"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230801",
                "engine_version": "3.24.0.10447"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230801",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230801",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230801",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230801",
                "engine_version": "1.1.23060.1005"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230801",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230801",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230801",
                "engine_version": "27665"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230801",
                "engine_version": "1.0.129.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230801",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230801",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230801",
                "engine_version": "12.104.49137"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230705",
                "engine_version": "23.3.0.3"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230731",
                "engine_version": "230731-02"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230801",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230801",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230731",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230730",
                "engine_version": "1.0.146.25796"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230729",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230801",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230801",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230727",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230731",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230801",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "9601457e0c7c39f6f5295a5d799c8c59",
            "sha1": "3d84d7c90c601d374cddf90d5e5d60888daf4834",
            "size": 162466,
            "sha256": "9073568f2db90cd737e19bd13760b4a11427c3b9b531d1162ccc96ad45a9aed9"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-08-01 01:33:43 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.2.0",
      "slug": "puppetlabs-stdlib-9.2.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.2.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.2.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.2.0.tar.gz",
      "file_size": 161833,
      "file_md5": "f5c8e1e8e06ed33a9c381c11fa639b57",
      "file_sha256": "f44ac5539ddd877f9301f989ae23447e83334d7b28ebfc9fa3387df112467836",
      "downloads": 17321,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0)\n\n### Added\n\n- Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher))\n- Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n- MODULES-6106: Fix broken `.sync.yml` [#854](https://github.com/puppetlabs/puppetlabs-stdlib/pull/854) ([](https://github.com/))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- [MODULES-2370] file_line.rb: Fix `line` attribute validation [#585](https://github.com/puppetlabs/puppetlabs-stdlib/pull/585) ([](https://github.com/))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n- [MODULES-2370] allow `match` parameter to influence `ensure => absent` behavior. [#499](https://github.com/puppetlabs/puppetlabs-stdlib/pull/499) ([](https://github.com/))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`nested_values`](#nested_values): This function will return list of Hash values, the return value will be Array NOTE : This function is expecting only Hash and return value wi\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"nested_values\"></a>`nested_values`\n\nType: Ruby 4.x API\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\n#### Examples\n\n##### :\n\n```puppet\n\n```\n\n#### `nested_values(Hash $options)`\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\nReturns: `Array`\n\n##### Examples\n\n###### :\n\n```puppet\n\n```\n\n##### `options`\n\nData type: `Hash`\n\n\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[String] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[String]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Ip::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "ZjVjOGUxZThlMDZlZDMzYTljMzgxYzExZmE2MzliNTc6MTY4Nzg3NzIyMQ==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/f44ac5539ddd877f9301f989ae23447e83334d7b28ebfc9fa3387df112467836",
            "self": "https://www.virustotal.com/api/v3/analyses/ZjVjOGUxZThlMDZlZDMzYTljMzgxYzExZmE2MzliNTc6MTY4Nzg3NzIyMQ=="
          },
          "attributes": {
            "date": 1687877221,
            "stats": {
              "failure": 0,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 59,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230627",
                "engine_version": "22.11.7701.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230619",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230627",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230625",
                "engine_version": "6.426"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230627",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230627",
                "engine_version": "12.93.48771"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230627",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230627",
                "engine_version": "22.11.7701.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230627",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230627",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230627",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230627",
                "engine_version": "7.0.59.12300"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230627",
                "engine_version": "A:25.36103B:27.32206"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230627",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230627",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230627",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230627",
                "engine_version": "9.5.478"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230627",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230627",
                "engine_version": "1.1.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230627",
                "engine_version": "1687874521"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230627",
                "engine_version": "6.1.14.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230627",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230627",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230627",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230627",
                "engine_version": "2.3.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230627",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230626",
                "engine_version": "2.0.0.4901"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230219",
                "engine_version": "1.2.0.114"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230627",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230607",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230620",
                "engine_version": "4.0.95"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230627",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230625",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230627",
                "engine_version": "2023-06-27.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20230627",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230627",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230627",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230627",
                "engine_version": "35773"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230627",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230627",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230627",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230627",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230626",
                "engine_version": "16.0.100"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230627",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230627",
                "engine_version": "1.20.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230412",
                "engine_version": "4.0.14.446"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230627",
                "engine_version": "3.23.3.10396"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230627",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230627",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230627",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230627",
                "engine_version": "1.1.23050.3"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230627",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230627",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230627",
                "engine_version": "27476"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230627",
                "engine_version": "1.0.126.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230627",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230627",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230627",
                "engine_version": "12.93.48770"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230404",
                "engine_version": "23.2.0.1"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230627",
                "engine_version": "230627-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230626",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230627",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230626",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230627",
                "engine_version": "1.0.146.25785"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230626",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230621",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230627",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230622",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230627",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230627",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "f5c8e1e8e06ed33a9c381c11fa639b57",
            "sha1": "b6ab57e7814e744d7354b69cffda8cc0813995e0",
            "size": 161833,
            "sha256": "f44ac5539ddd877f9301f989ae23447e83334d7b28ebfc9fa3387df112467836"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-06-27 07:46:10 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.1.0",
      "slug": "puppetlabs-stdlib-9.1.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.1.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.1.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.1.0.tar.gz",
      "file_size": 161355,
      "file_md5": "4a97acc41cfeac47db5e12ba78829f52",
      "file_sha256": "9ab8d59ccd54b7dafca383268bf31d914fd6384d36a27075016843f53b4e6188",
      "downloads": 8453,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0)\n\n### Added\n\n- re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman))\n\n### Fixed\n\n- (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan))\n- (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7))\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Fixed\n\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n- MODULES-6106: Fix broken `.sync.yml` [#854](https://github.com/puppetlabs/puppetlabs-stdlib/pull/854) ([](https://github.com/))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Fixed\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (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))\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- 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))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n### Other\n\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n- (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))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n\n### Fixed\n\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- (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))\n\n### Other\n\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Fixed\n\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Added\n\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n### Fixed\n\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- [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))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Added\n\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n\n### Fixed\n\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- (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))\n- 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))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n\n### Other\n\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Added\n\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n### Fixed\n\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Added\n\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n\n### Fixed\n\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- (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))\n\n### Other\n\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Added\n\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n\n### Fixed\n\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- [MODULES-2370] file_line.rb: Fix `line` attribute validation [#585](https://github.com/puppetlabs/puppetlabs-stdlib/pull/585) ([](https://github.com/))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- 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))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Added\n\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Added\n\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n### Fixed\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n\n### Other\n\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Added\n\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n- [MODULES-2370] allow `match` parameter to influence `ensure => absent` behavior. [#499](https://github.com/puppetlabs/puppetlabs-stdlib/pull/499) ([](https://github.com/))\n\n### Fixed\n\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Fixed\n\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Added\n\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n\n### Fixed\n\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- 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))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- 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))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 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))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- (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))\n- (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))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n### Other\n\n- Adding markdown for the range() function's 3rd argument [#410](https://github.com/puppetlabs/puppetlabs-stdlib/pull/410) ([robruma](https://github.com/robruma))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Added\n\n- 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))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n\n### Fixed\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Added\n\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n### Fixed\n\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Added\n\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n\n### Fixed\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- 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))\n- 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))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Fixed\n\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Added\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Added\n\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n\n### Fixed\n\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Added\n\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n\n### Fixed\n\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Added\n\n- (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))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- 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))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n### Fixed\n\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Added\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Added\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Added\n\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n\n### Fixed\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Fixed\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Added\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Fixed\n\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- 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))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Added\n\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n### Fixed\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Added\n\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n\n### Fixed\n\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Fixed\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Fixed\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Fixed\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Added\n\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n### Fixed\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Added\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Added\n\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n### Fixed\n\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Added\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n* [`nested_values`](#nested_values): This function will return list of Hash values, the return value will be Array NOTE : This function is expecting only Hash and return value wi\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.\n\nThis function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.\n* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`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.\n* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON\n* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON\n* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation\n* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation\n* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.\n* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML\n* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.\n* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export HTTP_PROXY=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export HTTP_PROXY=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.\n\n#### `batch_escape(Any *$args)`\n\nThe batch_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a S\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.\n\n#### `ensure_packages(Any *$args)`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.\n\n#### `fqdn_rand_string(Any *$args)`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $h\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.\n\n#### `merge(Any *$args)`\n\nThe merge function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"nested_values\"></a>`nested_values`\n\nType: Ruby 4.x API\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\n#### Examples\n\n##### :\n\n```puppet\n\n```\n\n#### `nested_values(Hash $options)`\n\nThis function will return list of Hash values, the return value will be Array\nNOTE : This function is expecting only Hash and return value will be Array\n\n$hash = {\n  \"key1\" => \"value1\",\n  \"key2\" => { \"key2.1\" => \"value2.1\"}\n}\n$hash.nested_values\n\nOutput : [\"value1\", \"value2.1\"]\n\nReturns: `Array`\n\n##### Examples\n\n###### :\n\n```puppet\n\n```\n\n##### `options`\n\nData type: `Hash`\n\n\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.\n\n#### `os_version_gte(Any *$args)`\n\nThe os_version_gte function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.\n\n#### `parsehocon(Any *$args)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.\n\n#### `powershell_escape(Any *$args)`\n\nThe powershell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.\n\n#### `seeded_rand(Any *$args)`\n\nThe seeded_rand function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.\n\n#### `seeded_rand_string(Any *$args)`\n\nThe seeded_rand_string function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.\n\n#### `shell_escape(Any *$args)`\n\nThe shell_escape function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--batch_escape\"></a>`stdlib::batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Sensitive[String], Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--ensure_packages\"></a>`stdlib::ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]]]`\n\nThe packages to ensure are installed.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`\n\nThe stdlib::ensure_packages function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Hash[String[1], Any]`\n\nThe packages to ensure are installed. The keys are packages and values are the attributes specific to that package.\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes. Package specific attributes from the `packages` parameter will take precedence.\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--fqdn_rand_string\"></a>`stdlib::fqdn_rand_string`\n\nType: Ruby 4.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[String] $charset, Optional[Any] *$seed)`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nstdlib::fqdn_rand_string(10)\nstdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')\nstdlib::fqdn_rand_string(10, '', 'custom seed')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nThe length of the resulting string.\n\n##### `charset`\n\nData type: `Optional[String]`\n\nThe character set to use.\n\n##### `*seed`\n\nData type: `Optional[Any]`\n\nThe seed for repeatable randomness.\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--merge\"></a>`stdlib::merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using stdlib::merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['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 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['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 }\n```\n\n#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe stdlib::merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe stdlib::merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"stdlib--os_version_gte\"></a>`stdlib::os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif stdlib::os_version_gte('Debian', '9') { }\nif stdlib::os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"stdlib--parsehocon\"></a>`stdlib::parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe stdlib::parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = stdlib::parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"stdlib--powershell_escape\"></a>`stdlib::powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `stdlib::powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--seeded_rand\"></a>`stdlib::seeded_rand`\n\nType: Ruby 4.x API\n\nGenerates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.\n\n#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`\n\nThe stdlib::seeded_rand function.\n\nReturns: `Integer` A random number greater than or equal to 0 and less than max\n\n##### `max`\n\nData type: `Integer[1]`\n\nThe maximum value.\n\n##### `seed`\n\nData type: `String`\n\nThe seed used for repeatable randomness.\n\n### <a name=\"stdlib--seeded_rand_string\"></a>`stdlib::seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe stdlib::seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nstdlib::seeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nstdlib::seeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--shell_escape\"></a>`stdlib::shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `stdlib::shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--to_json\"></a>`stdlib::to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n#### `stdlib::to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => stdlib::to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"stdlib--to_json_pretty\"></a>`stdlib::to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe stdlib::to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => stdlib::to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"stdlib--to_python\"></a>`stdlib::to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_python(Any $object)`\n\nThe stdlib::to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_python($listen) %>\n    PORT = <%= stdlib::to_python($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_ruby\"></a>`stdlib::to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n#### `stdlib::to_ruby(Any $object)`\n\nThe stdlib::to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= stdlib::to_ruby($listen) %>\n    PORT = <%= stdlib::to_ruby($mailserver) %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"stdlib--to_toml\"></a>`stdlib::to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n#### `stdlib::to_toml(Hash $data)`\n\nThe stdlib::to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => stdlib::to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"stdlib--to_yaml\"></a>`stdlib::to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => stdlib::to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"stdlib--type_of\"></a>`stdlib::type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `stdlib::type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless stdlib::type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless stdlib::type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"stdlib--validate_domain_name\"></a>`stdlib::validate_domain_name`\n\nType: Ruby 4.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`\n\nThe stdlib::validate_domain_name function.\n\nReturns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_domain_name = 'server.domain.tld'\nstdlib::validate_domain_name($my_domain_name)\nstdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\nstdlib::validate_domain_name('www.example.2com')\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\nstdlib::validate_domain_name(1)\nstdlib::validate_domain_name(true)\nstdlib::validate_domain_name('invalid domain')\nstdlib::validate_domain_name('-foo.example.com')\n```\n\n##### `*values`\n\nData type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`\n\nA domain name or an array of domain names to check\n\n### <a name=\"stdlib--validate_email_address\"></a>`stdlib::validate_email_address`\n\nType: Ruby 4.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n##### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n#### `stdlib::validate_email_address(Stdlib::Email *$values)`\n\nThe stdlib::validate_email_address function.\n\nReturns: `Undef` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### Passing examples\n\n```puppet\n$my_email = \"waldo@gmail.com\"\nstdlib::validate_email_address($my_email)\nstdlib::validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n```\n\n###### Failing examples (causing compilation to abort)\n\n```puppet\n$some_array = [ 'bad_email@/d/efdf.com' ]\nstdlib::validate_email_address($some_array)\n```\n\n##### `*values`\n\nData type: `Stdlib::Email`\n\nAn e-mail address or an array of e-mail addresses to check\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.\n\n#### `to_json(Any *$args)`\n\nThe to_json function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.\n\n#### `to_json_pretty(Any *$args)`\n\nThe to_json_pretty function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.\n\n#### `to_python(Any *$args)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.\n\n#### `to_ruby(Any *$args)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.\n\n#### `to_toml(Any *$args)`\n\nThe to_toml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.\n\n#### `to_yaml(Any *$args)`\n\nThe to_yaml function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.\n\n#### `type_of(Any *$args)`\n\nThe type_of function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\n#### `uriescape()`\n\n> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.\nTherefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.\nThis function should be removed once Puppet 7 is no longer supported.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.\n\n#### `validate_domain_name(Any *$args)`\n\nThe validate_domain_name function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.\n\n#### `validate_email_address(Any *$args)`\n\nThe validate_email_address function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\n**Deprecated:** Validate a value against both the target_type (new).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\nUnused\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Dns--Zone\"></a>`Stdlib::Dns::Zone`\n\nValidate a DNS zone name\n\nAlias of `Pattern[/\\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)+|\\.)\\z/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Ip::Address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--CIDR\"></a>`Stdlib::IP::Address::CIDR`\n\nValidate an IP address with subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "NGE5N2FjYzQxY2ZlYWM0N2RiNWUxMmJhNzg4MjlmNTI6MTY4NzM4NzczNw==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/9ab8d59ccd54b7dafca383268bf31d914fd6384d36a27075016843f53b4e6188",
            "self": "https://www.virustotal.com/api/v3/analyses/NGE5N2FjYzQxY2ZlYWM0N2RiNWUxMmJhNzg4MjlmNTI6MTY4NzM4NzczNw=="
          },
          "attributes": {
            "date": 1687387737,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 58,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230621",
                "engine_version": "22.11.7701.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230619",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230621",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230619",
                "engine_version": "6.424"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230619",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230621",
                "engine_version": "12.93.48713"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230621",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230621",
                "engine_version": "22.11.7701.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230621",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230621",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230621",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230621",
                "engine_version": "7.0.59.12300"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230621",
                "engine_version": "A:25.36067B:27.32139"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230621",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230621",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230621",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230621",
                "engine_version": "9.5.474"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230621",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230621",
                "engine_version": "1.1.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230621",
                "engine_version": "1687384828"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230621",
                "engine_version": "6.1.14.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230621",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230621",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230621",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230621",
                "engine_version": "2.3.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230621",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230621",
                "engine_version": "2.0.0.4899"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230219",
                "engine_version": "1.2.0.114"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230621",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230607",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230620",
                "engine_version": "4.0.95"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230621",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230616",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230621",
                "engine_version": "2023-06-21.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20230621",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230621",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230621",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230621",
                "engine_version": "35756"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230621",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230621",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230621",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230621",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230620",
                "engine_version": "16.0.100"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230621",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230621",
                "engine_version": "1.20.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230412",
                "engine_version": "4.0.14.446"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230621",
                "engine_version": "3.23.3.10396"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230621",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230621",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230620",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230621",
                "engine_version": "1.1.23050.3"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230621",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230621",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230621",
                "engine_version": "27446"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230621",
                "engine_version": "1.0.125.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230621",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230621",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230621",
                "engine_version": "12.93.48713"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230404",
                "engine_version": "23.2.0.1"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230621",
                "engine_version": "230621-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230619",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230621",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230620",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230621",
                "engine_version": "1.0.146.25785"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230511",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230621",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230621",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230619",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230621",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230621",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "4a97acc41cfeac47db5e12ba78829f52",
            "sha1": "bab20d5659742b566f877fdeb62dbbecfd19c7e2",
            "size": 161355,
            "sha256": "9ab8d59ccd54b7dafca383268bf31d914fd6384d36a27075016843f53b4e6188"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-06-15 02:07:57 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-9.0.0",
      "slug": "puppetlabs-stdlib-9.0.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "9.0.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "9.0.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 93,
      "file_uri": "/v3/files/puppetlabs-stdlib-9.0.0.tar.gz",
      "file_size": 177233,
      "file_md5": "e57da2e8f7d143679681f848297d3e49",
      "file_sha256": "c84c214afbefde63765d74f0a312ce07d5fcca3b501d2fef71553a2212340dca",
      "downloads": 17904,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "<!-- markdownlint-disable MD024 -->\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0)\n\n### Added\n\n- Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex))\n- Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex))\n\n### Changed\n- Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex))\n- Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex))\n- Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex))\n- Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex))\n- Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex))\n- Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex))\n- Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex))\n- Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex))\n- Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex))\n- Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex))\n- Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex))\n- Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex))\n- Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex))\n- Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex))\n- Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex))\n- Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex))\n- Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex))\n- Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher))\n- Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings))\n- Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings))\n- Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings))\n- Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings))\n- (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud))\n\n### Fixed\n\n- Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl))\n- Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex))\n- Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24))\n- Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher))\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- (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))\n- Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Added\n\n- New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Fixed\n\n- (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw_hash: add support for bcrypt variants [#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) - 2021-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate_ipv6_address function [#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) - 2021-03-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Added\n\n- Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Changed\n- 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))\n\n### Fixed\n\n- (bugfix) Setting stricter email validation [#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) - 2021-02-02\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- (feat) Add support for Puppet 7 [#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to_yaml [#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- (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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) - 2020-09-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon() function [#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) - 2020-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- (IAC-746) - Add ubuntu 20.04 support [#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- [MODULES-10781] Fix defined type defined_with_params() [#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- [MODULES-10729] defined_with_params - unnamed type [#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) - 2020-04-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start_with function [#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end_with: create String.end_with function [#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- (MODULES-10623) explicitly top-scope calls to JSON methods [#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- [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))\n- Add correct namespace for start_with function [#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) - 2019-12-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- (FM-8696) - Addition of Support for CentOS 8 [#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to_json_pretty [#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection (for the moment) [#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) - 2019-09-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- (MODULES-9915) Add type aliases for cloud object store uris [#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- (FM-8230) Convert testing to litmus [#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- (FM-8160) Add Windows Server 2019 support [#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- (FM-8048) Add RedHat 8 support [#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- (MODULES-9049) Add type alias for 'yes' and 'no'. [#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range(). [#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) - 2019-05-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Added\n\n- (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n- Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n### Changed\n- pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n\n### Other\n\n- (MODULES-8992)- Supported Release (puppetlabs-stdlib) [#1015](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1015) ([lionce](https://github.com/lionce))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- (MODULES-8404) - Relax `Stdlib::Filesource` type [#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- (MODULES-8137) - Addition of support for SLES 15 [#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- (MODULES-8322) Consider IPs with /0 as valid [#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- (MODULES-8273) - Make unquoted classes useable [#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname() [#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- (MODULES-7024) Add 20-octet MAC addresses [#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - (FM-7655) Fix rubygems-update for ruby < 2.3 [#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure_packages duplicate checking [#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) - 2018-10-01\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- (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))\n- Fix `pick` function docs [#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- (MODULES-7768) Handle nil in delete_undef_values() function [#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## [5.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0)\n\n### Added\n\n- (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney))\n- (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan))\n- 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))\n- Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops))\n- Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl))\n- (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt))\n- Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k))\n- seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd))\n\n### Fixed\n\n- Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro))\n- Revert \"Allow pick() to work with strict variables\" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha))\n- (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg))\n\n### Other\n\n- (MODULES-6881) - Removing duplication in .sync.yml [#904](https://github.com/puppetlabs/puppetlabs-stdlib/pull/904) ([pmcmaw](https://github.com/pmcmaw))\n- Release Mergeback 4.25.1 [#901](https://github.com/puppetlabs/puppetlabs-stdlib/pull/901) ([HelenCampbell](https://github.com/HelenCampbell))\n\n## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1)\n\n### Other\n\n- (MODULES-6951) Updating translations for readmes/README_ja_JP.md [#900](https://github.com/puppetlabs/puppetlabs-stdlib/pull/900) ([ehom](https://github.com/ehom))\n- Remove unneeded execute permission [#880](https://github.com/puppetlabs/puppetlabs-stdlib/pull/880) ([smortex](https://github.com/smortex))\n\n## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0)\n\n### Added\n\n- (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt))\n\n### Fixed\n\n- Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB))\n\n### Other\n\n- (MODULES-6782) - Disable rockethash for spec_helper.rb [#886](https://github.com/puppetlabs/puppetlabs-stdlib/pull/886) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-6771) - Updates to README. [#885](https://github.com/puppetlabs/puppetlabs-stdlib/pull/885) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-6771) - Release Prep 4.25.0 [#884](https://github.com/puppetlabs/puppetlabs-stdlib/pull/884) ([pmcmaw](https://github.com/pmcmaw))\n- (maint) - Adding full stops in the README.md [#883](https://github.com/puppetlabs/puppetlabs-stdlib/pull/883) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-6332) - PDK convert [#881](https://github.com/puppetlabs/puppetlabs-stdlib/pull/881) ([pmcmaw](https://github.com/pmcmaw))\n- (maint) fixed typos, formatting issues [#879](https://github.com/puppetlabs/puppetlabs-stdlib/pull/879) ([ehom](https://github.com/ehom))\n- fix formating of Stdlib::Port examples in README.md [#878](https://github.com/puppetlabs/puppetlabs-stdlib/pull/878) ([SimonPe](https://github.com/SimonPe))\n- get rid of fixnum|bignum deprecation warning [#875](https://github.com/puppetlabs/puppetlabs-stdlib/pull/875) ([tuxmea](https://github.com/tuxmea))\n- (maint) Add modern Windows OS to metadata [#873](https://github.com/puppetlabs/puppetlabs-stdlib/pull/873) ([glennsarti](https://github.com/glennsarti))\n- (maint) modulesync 65530a4 Update Travis [#871](https://github.com/puppetlabs/puppetlabs-stdlib/pull/871) ([michaeltlombardi](https://github.com/michaeltlombardi))\n- (maint) modulesync cd884db Remove AppVeyor OpenSSL update on Ruby 2.4 [#868](https://github.com/puppetlabs/puppetlabs-stdlib/pull/868) ([michaeltlombardi](https://github.com/michaeltlombardi))\n- FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan))\n- (maint) - modulesync 384f4c1 [#866](https://github.com/puppetlabs/puppetlabs-stdlib/pull/866) ([tphoney](https://github.com/tphoney))\n- Release mergeback [#865](https://github.com/puppetlabs/puppetlabs-stdlib/pull/865) ([willmeek](https://github.com/willmeek))\n- fixed wrong comment in unixpath.pp [#862](https://github.com/puppetlabs/puppetlabs-stdlib/pull/862) ([c33s](https://github.com/c33s))\n- update Stdlib::*::ip* types [#843](https://github.com/puppetlabs/puppetlabs-stdlib/pull/843) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr))\n- add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr))\n\n## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0)\n\n### Other\n\n- Release Prep 4.24.0 [#864](https://github.com/puppetlabs/puppetlabs-stdlib/pull/864) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6634) - Addressing rubocop errors [#863](https://github.com/puppetlabs/puppetlabs-stdlib/pull/863) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw))\n- MODULES-6201 .rubocop.yml not managed by msync [#859](https://github.com/puppetlabs/puppetlabs-stdlib/pull/859) ([tphoney](https://github.com/tphoney))\n- MODULES-6139 Revert to old ruby 1.X style of hash [#858](https://github.com/puppetlabs/puppetlabs-stdlib/pull/858) ([tphoney](https://github.com/tphoney))\n- Lint style/syntax [#857](https://github.com/puppetlabs/puppetlabs-stdlib/pull/857) ([AlexanderSalmin](https://github.com/AlexanderSalmin))\n- Updated type alias tests and dropped superfluous wrapper classes [#856](https://github.com/puppetlabs/puppetlabs-stdlib/pull/856) ([pegasd](https://github.com/pegasd))\n- Ability to skip undef values in to_json_pretty() [#855](https://github.com/puppetlabs/puppetlabs-stdlib/pull/855) ([pegasd](https://github.com/pegasd))\n- MODULES-6106: Fix broken `.sync.yml` [#854](https://github.com/puppetlabs/puppetlabs-stdlib/pull/854) ([](https://github.com/))\n- Release mergeback 4.23.0 [#853](https://github.com/puppetlabs/puppetlabs-stdlib/pull/853) ([tphoney](https://github.com/tphoney))\n\n## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0)\n\n### Other\n\n- Min function correction [#852](https://github.com/puppetlabs/puppetlabs-stdlib/pull/852) ([pmcmaw](https://github.com/pmcmaw))\n- Add test for https://github.com/puppetlabs/puppetlabs-stdlib/pull/850 [#851](https://github.com/puppetlabs/puppetlabs-stdlib/pull/851) ([sean797](https://github.com/sean797))\n- Adding in else additional else statement [#850](https://github.com/puppetlabs/puppetlabs-stdlib/pull/850) ([pmcmaw](https://github.com/pmcmaw))\n- PreRelease-4.23.0 [#849](https://github.com/puppetlabs/puppetlabs-stdlib/pull/849) ([david22swan](https://github.com/david22swan))\n- Updating translations for readmes/README_ja_JP.md [#848](https://github.com/puppetlabs/puppetlabs-stdlib/pull/848) ([david22swan](https://github.com/david22swan))\n- (maint) - modulesync 1d81b6a [#847](https://github.com/puppetlabs/puppetlabs-stdlib/pull/847) ([pmcmaw](https://github.com/pmcmaw))\n- Release mergeback 4.22.0 [#846](https://github.com/puppetlabs/puppetlabs-stdlib/pull/846) ([pmcmaw](https://github.com/pmcmaw))\n- Rubocop Implementation [#838](https://github.com/puppetlabs/puppetlabs-stdlib/pull/838) ([david22swan](https://github.com/david22swan))\n\n## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0)\n\n### Other\n\n- Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx))\n- Pre release [#844](https://github.com/puppetlabs/puppetlabs-stdlib/pull/844) ([david22swan](https://github.com/david22swan))\n- fixups on stdlib README [#837](https://github.com/puppetlabs/puppetlabs-stdlib/pull/837) ([jbondpdx](https://github.com/jbondpdx))\n- (FM-6572) PreRelease [#836](https://github.com/puppetlabs/puppetlabs-stdlib/pull/836) ([david22swan](https://github.com/david22swan))\n- 4.21.0 release merge back [#835](https://github.com/puppetlabs/puppetlabs-stdlib/pull/835) ([HAIL9000](https://github.com/HAIL9000))\n\n## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0)\n\n### Added\n\n- Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker))\n\n### Fixed\n\n- Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher))\n\n### Other\n\n- Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt))\n- (MODULES-5814) - Removing Windows 8 [#833](https://github.com/puppetlabs/puppetlabs-stdlib/pull/833) ([pmcmaw](https://github.com/pmcmaw))\n- 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))\n- Updates to metadata.json [#830](https://github.com/puppetlabs/puppetlabs-stdlib/pull/830) ([pmcmaw](https://github.com/pmcmaw))\n- (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k))\n- README fixups for 4.21.0 release [#828](https://github.com/puppetlabs/puppetlabs-stdlib/pull/828) ([jbondpdx](https://github.com/jbondpdx))\n- (MODULES-5806) release prep for version 4.21.0 [#827](https://github.com/puppetlabs/puppetlabs-stdlib/pull/827) ([eputnam](https://github.com/eputnam))\n- correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre))\n- (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner))\n- (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))\n- (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))\n- (maint) Clarify docs and add new tests [#820](https://github.com/puppetlabs/puppetlabs-stdlib/pull/820) ([alexharv074](https://github.com/alexharv074))\n- removing duplicate test absolute_path test [#818](https://github.com/puppetlabs/puppetlabs-stdlib/pull/818) ([tphoney](https://github.com/tphoney))\n- (maint) modulesync 892c4cf [#817](https://github.com/puppetlabs/puppetlabs-stdlib/pull/817) ([HAIL9000](https://github.com/HAIL9000))\n- use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante))\n- version 4.20.0 mergeback [#815](https://github.com/puppetlabs/puppetlabs-stdlib/pull/815) ([eputnam](https://github.com/eputnam))\n- Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo))\n\n## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0)\n\n### Added\n\n- Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit))\n\n### Other\n\n- (maint) re-send push action to transifex [#814](https://github.com/puppetlabs/puppetlabs-stdlib/pull/814) ([eputnam](https://github.com/eputnam))\n- (MODULES-5508) release prep for 4.20.0 [#812](https://github.com/puppetlabs/puppetlabs-stdlib/pull/812) ([eputnam](https://github.com/eputnam))\n- (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam))\n- release 4.19.0 mergeback [#808](https://github.com/puppetlabs/puppetlabs-stdlib/pull/808) ([eputnam](https://github.com/eputnam))\n\n## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0)\n\n### Other\n\n- 4.19.0 prep [#807](https://github.com/puppetlabs/puppetlabs-stdlib/pull/807) ([tphoney](https://github.com/tphoney))\n- (MODULES-5501) - Remove unsupported Ubuntu [#806](https://github.com/puppetlabs/puppetlabs-stdlib/pull/806) ([pmcmaw](https://github.com/pmcmaw))\n- Release mergeback 4.18.0 [#805](https://github.com/puppetlabs/puppetlabs-stdlib/pull/805) ([tphoney](https://github.com/tphoney))\n\n## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0)\n\n### Added\n\n- add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak))\n\n### Other\n\n- (MODULES-5436) release prep for 4.18.0 [#804](https://github.com/puppetlabs/puppetlabs-stdlib/pull/804) ([eputnam](https://github.com/eputnam))\n- MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney))\n- (MODULES-5436) release prep for 4.17.2 [#802](https://github.com/puppetlabs/puppetlabs-stdlib/pull/802) ([eputnam](https://github.com/eputnam))\n- (maint) revert puppet version requirement [#801](https://github.com/puppetlabs/puppetlabs-stdlib/pull/801) ([eputnam](https://github.com/eputnam))\n- MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney))\n- (maint) modulesync 915cde70e20 [#799](https://github.com/puppetlabs/puppetlabs-stdlib/pull/799) ([glennsarti](https://github.com/glennsarti))\n- (maint) move/rewrite round() as ruby function [#798](https://github.com/puppetlabs/puppetlabs-stdlib/pull/798) ([eputnam](https://github.com/eputnam))\n- Update README for fact() function [#797](https://github.com/puppetlabs/puppetlabs-stdlib/pull/797) ([reidmv](https://github.com/reidmv))\n- (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))\n- (FM-6239) rewrite of test following std patterns [#793](https://github.com/puppetlabs/puppetlabs-stdlib/pull/793) ([tphoney](https://github.com/tphoney))\n- (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))\n- (MODULES-5187) mysnc puppet 5 and ruby 2.4 [#790](https://github.com/puppetlabs/puppetlabs-stdlib/pull/790) ([eputnam](https://github.com/eputnam))\n- (MODULES-5186) - do not run file_line unit tests on windows.  [#789](https://github.com/puppetlabs/puppetlabs-stdlib/pull/789) ([tphoney](https://github.com/tphoney))\n- (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney))\n- (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv))\n- (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv))\n- (MODULES-5144) Prep for puppet 5 [#784](https://github.com/puppetlabs/puppetlabs-stdlib/pull/784) ([hunner](https://github.com/hunner))\n- Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies))\n- 4.17.1 Release Mergeback [#782](https://github.com/puppetlabs/puppetlabs-stdlib/pull/782) ([HelenCampbell](https://github.com/HelenCampbell))\n- (maint) Stdlib::Compat::Integer accepts numbers with newlines apparently [#756](https://github.com/puppetlabs/puppetlabs-stdlib/pull/756) ([hunner](https://github.com/hunner))\n- Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex))\n- Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker))\n- Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb))\n- (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))\n\n## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1)\n\n### Other\n\n- Release prep for 4.17.1 [#781](https://github.com/puppetlabs/puppetlabs-stdlib/pull/781) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren))\n- (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx))\n- MODULES-4821 puppetlabs-stdlib: Update the version compatibility to >= 4.7.0 < 5.0.0 [#778](https://github.com/puppetlabs/puppetlabs-stdlib/pull/778) ([marsmensch](https://github.com/marsmensch))\n- Merge back 4.17.0 [#776](https://github.com/puppetlabs/puppetlabs-stdlib/pull/776) ([tphoney](https://github.com/tphoney))\n\n## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0)\n\n### Other\n\n- (WIP) Release Branch Update Merge [#774](https://github.com/puppetlabs/puppetlabs-stdlib/pull/774) ([HelenCampbell](https://github.com/HelenCampbell))\n- (maint) rename main readme [#772](https://github.com/puppetlabs/puppetlabs-stdlib/pull/772) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam))\n- (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx))\n- Release prep [#769](https://github.com/puppetlabs/puppetlabs-stdlib/pull/769) ([tphoney](https://github.com/tphoney))\n- Removing italics for 'undef' value [#768](https://github.com/puppetlabs/puppetlabs-stdlib/pull/768) ([pmcmaw](https://github.com/pmcmaw))\n- (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))\n- (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner))\n- (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))\n- Release mergeback [#760](https://github.com/puppetlabs/puppetlabs-stdlib/pull/760) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu))\n- TOC updates [#755](https://github.com/puppetlabs/puppetlabs-stdlib/pull/755) ([rnelson0](https://github.com/rnelson0))\n- [msync] 786266 Implement puppet-module-gems, a45803 Remove metadata.json from locales config [#754](https://github.com/puppetlabs/puppetlabs-stdlib/pull/754) ([wilson208](https://github.com/wilson208))\n- (MODULES-4322) pre-loc edit on stdlib README [#747](https://github.com/puppetlabs/puppetlabs-stdlib/pull/747) ([jbondpdx](https://github.com/jbondpdx))\n- (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw))\n- [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))\n- Release Mergeback 4.16.0 [#744](https://github.com/puppetlabs/puppetlabs-stdlib/pull/744) ([HelenCampbell](https://github.com/HelenCampbell))\n- Update alias spec error message expectation for PUP-7371 [#743](https://github.com/puppetlabs/puppetlabs-stdlib/pull/743) ([domcleal](https://github.com/domcleal))\n- Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer))\n\n## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0)\n\n### Other\n\n- Release prep for 4.16.0 [#742](https://github.com/puppetlabs/puppetlabs-stdlib/pull/742) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell))\n- Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal))\n- Release mergeback for 4.15.0 [#739](https://github.com/puppetlabs/puppetlabs-stdlib/pull/739) ([HelenCampbell](https://github.com/HelenCampbell))\n- (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))\n- Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell))\n- 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))\n- (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6085) - Unit tests for Data Types [#733](https://github.com/puppetlabs/puppetlabs-stdlib/pull/733) ([pmcmaw](https://github.com/pmcmaw))\n- (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems))\n- (MODULES-4473) join strings for i18n parser [#729](https://github.com/puppetlabs/puppetlabs-stdlib/pull/729) ([eputnam](https://github.com/eputnam))\n- loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney))\n- (FM-6058) - Unit tests for med effort functions [#727](https://github.com/puppetlabs/puppetlabs-stdlib/pull/727) ([pmcmaw](https://github.com/pmcmaw))\n- (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams))\n- (FM-6054) - Unit tests for low effort functions [#725](https://github.com/puppetlabs/puppetlabs-stdlib/pull/725) ([pmcmaw](https://github.com/pmcmaw))\n- Modules 4429 unit tests [#724](https://github.com/puppetlabs/puppetlabs-stdlib/pull/724) ([pmcmaw](https://github.com/pmcmaw))\n- remove unsupported platforms and future parser [#723](https://github.com/puppetlabs/puppetlabs-stdlib/pull/723) ([tphoney](https://github.com/tphoney))\n- Fix acceptance test failure \"Hiera is not a class\" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS))\n- Allow test module metadata.json to be read [#719](https://github.com/puppetlabs/puppetlabs-stdlib/pull/719) ([domcleal](https://github.com/domcleal))\n- Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal))\n- (FM-6019) - i18N tests for Spike [#714](https://github.com/puppetlabs/puppetlabs-stdlib/pull/714) ([pmcmaw](https://github.com/pmcmaw))\n- (MODULES-4098) Sync the rest of the files [#712](https://github.com/puppetlabs/puppetlabs-stdlib/pull/712) ([hunner](https://github.com/hunner))\n\n## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0)\n\n### Added\n\n- (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems))\n\n### Other\n\n- Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208))\n- Release Prep for 4.15.0 [#711](https://github.com/puppetlabs/puppetlabs-stdlib/pull/711) ([HelenCampbell](https://github.com/HelenCampbell))\n- Release mergeback - second attempt [#710](https://github.com/puppetlabs/puppetlabs-stdlib/pull/710) ([HelenCampbell](https://github.com/HelenCampbell))\n- Release Mergeback [#709](https://github.com/puppetlabs/puppetlabs-stdlib/pull/709) ([HelenCampbell](https://github.com/HelenCampbell))\n- Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-4097) Sync travis.yml [#706](https://github.com/puppetlabs/puppetlabs-stdlib/pull/706) ([hunner](https://github.com/hunner))\n- add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam))\n- Change - Update str2bool documentation [#703](https://github.com/puppetlabs/puppetlabs-stdlib/pull/703) ([blackknight36](https://github.com/blackknight36))\n- (FM-5972) gettext and spec.opts [#702](https://github.com/puppetlabs/puppetlabs-stdlib/pull/702) ([eputnam](https://github.com/eputnam))\n- Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner))\n- Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv))\n\n## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0)\n\n### Other\n\n- Release prep for 4.14.0 [#699](https://github.com/puppetlabs/puppetlabs-stdlib/pull/699) ([HelenCampbell](https://github.com/HelenCampbell))\n- Release prep for 4.13.2 [#698](https://github.com/puppetlabs/puppetlabs-stdlib/pull/698) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000))\n- (MODULES-3631) msync Gemfile for 1.9 frozen strings [#696](https://github.com/puppetlabs/puppetlabs-stdlib/pull/696) ([hunner](https://github.com/hunner))\n- Indicate that the type function is preferred [#695](https://github.com/puppetlabs/puppetlabs-stdlib/pull/695) ([npwalker](https://github.com/npwalker))\n- Remove rvalue declaration from v3 deprecation() function [#694](https://github.com/puppetlabs/puppetlabs-stdlib/pull/694) ([DavidS](https://github.com/DavidS))\n- (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Call site output for deprecation warnings\" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen))\n- Fixing broken link to #validate_legacy docs [#691](https://github.com/puppetlabs/puppetlabs-stdlib/pull/691) ([idnorton](https://github.com/idnorton))\n- MODULES-4008: clarify deprecation language [#690](https://github.com/puppetlabs/puppetlabs-stdlib/pull/690) ([jbondpdx](https://github.com/jbondpdx))\n- Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS))\n- (MODULES-3704) Update gemfile template to be identical [#688](https://github.com/puppetlabs/puppetlabs-stdlib/pull/688) ([hunner](https://github.com/hunner))\n- (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R))\n- Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell))\n- Call site output for deprecation warnings [#685](https://github.com/puppetlabs/puppetlabs-stdlib/pull/685) ([HelenCampbell](https://github.com/HelenCampbell))\n-  This is to pin ruby version to parallel_tests [#682](https://github.com/puppetlabs/puppetlabs-stdlib/pull/682) ([pmcmaw](https://github.com/pmcmaw))\n- Remove leading spaces [#681](https://github.com/puppetlabs/puppetlabs-stdlib/pull/681) ([cacack](https://github.com/cacack))\n- (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS))\n- Fix incorrect environment variable name in README [#675](https://github.com/puppetlabs/puppetlabs-stdlib/pull/675) ([smoeding](https://github.com/smoeding))\n- Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd))\n\n## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1)\n\n### Other\n\n- (MODULES-3969) Update getvar to work on ruby 1.8.7 [#674](https://github.com/puppetlabs/puppetlabs-stdlib/pull/674) ([DavidS](https://github.com/DavidS))\n- (MODULES-3962) Rework v4 function shims to work on puppet 3.7 and 4.0.0 [#673](https://github.com/puppetlabs/puppetlabs-stdlib/pull/673) ([DavidS](https://github.com/DavidS))\n- (MODULES-3961) emit more deprecation warnings [#672](https://github.com/puppetlabs/puppetlabs-stdlib/pull/672) ([DavidS](https://github.com/DavidS))\n- Mergeback [#671](https://github.com/puppetlabs/puppetlabs-stdlib/pull/671) ([DavidS](https://github.com/DavidS))\n\n## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0)\n\n### Other\n\n- Release prep for 4.13.0 [#670](https://github.com/puppetlabs/puppetlabs-stdlib/pull/670) ([DavidS](https://github.com/DavidS))\n- Final cleanups [#668](https://github.com/puppetlabs/puppetlabs-stdlib/pull/668) ([DavidS](https://github.com/DavidS))\n- (FM-5703, PUP-6717) Remove the dynamic deprecation_gen function [#667](https://github.com/puppetlabs/puppetlabs-stdlib/pull/667) ([DavidS](https://github.com/DavidS))\n- (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000))\n- Ignore :undefined_variable \"reason\" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m))\n- Type updates [#664](https://github.com/puppetlabs/puppetlabs-stdlib/pull/664) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS))\n- Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal))\n- Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell))\n- MODULES-3774: stdlib validate_legacy review [#658](https://github.com/puppetlabs/puppetlabs-stdlib/pull/658) ([jbondpdx](https://github.com/jbondpdx))\n- Remove duplicate deprecation warnings [#657](https://github.com/puppetlabs/puppetlabs-stdlib/pull/657) ([HelenCampbell](https://github.com/HelenCampbell))\n- Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell))\n- Revert \"Ensure validate functions use Puppet 4 deprecation\" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell))\n- Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell))\n- Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner))\n- Change in readme for numerical string [#652](https://github.com/puppetlabs/puppetlabs-stdlib/pull/652) ([pmcmaw](https://github.com/pmcmaw))\n- Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell))\n- Deprecation function README update [#650](https://github.com/puppetlabs/puppetlabs-stdlib/pull/650) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-3737) refactor validate_legacy and tests [#649](https://github.com/puppetlabs/puppetlabs-stdlib/pull/649) ([DavidS](https://github.com/DavidS))\n- Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam))\n- Fix validate_legacy docs table formatting [#647](https://github.com/puppetlabs/puppetlabs-stdlib/pull/647) ([domcleal](https://github.com/domcleal))\n- MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam))\n- Update documentation for validate_legacy [#645](https://github.com/puppetlabs/puppetlabs-stdlib/pull/645) ([DavidS](https://github.com/DavidS))\n- Refactor dig44 function [#644](https://github.com/puppetlabs/puppetlabs-stdlib/pull/644) ([dmitryilyin](https://github.com/dmitryilyin))\n- Update modulesync_config [a3fe424] [#642](https://github.com/puppetlabs/puppetlabs-stdlib/pull/642) ([DavidS](https://github.com/DavidS))\n- Deprecation function to be mutable in all cases [#641](https://github.com/puppetlabs/puppetlabs-stdlib/pull/641) ([HelenCampbell](https://github.com/HelenCampbell))\n- (MODULES-3534) Deprecation of ip functions [#637](https://github.com/puppetlabs/puppetlabs-stdlib/pull/637) ([HelenCampbell](https://github.com/HelenCampbell))\n- (maint) Switch 3.x deprecation() to use Puppet warning logger [#636](https://github.com/puppetlabs/puppetlabs-stdlib/pull/636) ([domcleal](https://github.com/domcleal))\n- (MAINT) Update ensure_resource specs [#635](https://github.com/puppetlabs/puppetlabs-stdlib/pull/635) ([DavidS](https://github.com/DavidS))\n- (modules-3532) deprecate string type checks [#633](https://github.com/puppetlabs/puppetlabs-stdlib/pull/633) ([tphoney](https://github.com/tphoney))\n- Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex))\n- (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell))\n- (modules-3533) deprecation for 3.x number function [#629](https://github.com/puppetlabs/puppetlabs-stdlib/pull/629) ([tphoney](https://github.com/tphoney))\n- (MAINT) Update for modulesync_config 72d19f184 [#627](https://github.com/puppetlabs/puppetlabs-stdlib/pull/627) ([DavidS](https://github.com/DavidS))\n- Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud))\n- Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1))\n- Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1))\n- (modules-3407) documenting after can take a regex [#623](https://github.com/puppetlabs/puppetlabs-stdlib/pull/623) ([tphoney](https://github.com/tphoney))\n- (MODULES-3306) document deep_merge [#622](https://github.com/puppetlabs/puppetlabs-stdlib/pull/622) ([tphoney](https://github.com/tphoney))\n- (MODULES-2143) document edge behaviour of range. [#621](https://github.com/puppetlabs/puppetlabs-stdlib/pull/621) ([tphoney](https://github.com/tphoney))\n- (MAINT) modulesync [067d08a] [#619](https://github.com/puppetlabs/puppetlabs-stdlib/pull/619) ([DavidS](https://github.com/DavidS))\n- (MODULES-3568) Move dig to dig44 and deprecate dig [#618](https://github.com/puppetlabs/puppetlabs-stdlib/pull/618) ([ntpttr](https://github.com/ntpttr))\n- (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney))\n- (MODULES-3435) remove symlinks [#616](https://github.com/puppetlabs/puppetlabs-stdlib/pull/616) ([DavidS](https://github.com/DavidS))\n- (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))\n- (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS))\n- {maint} modulesync 0794b2c [#612](https://github.com/puppetlabs/puppetlabs-stdlib/pull/612) ([tphoney](https://github.com/tphoney))\n- (MODULES-3407) Clarify that 'after' in file_line accepts regex. [#611](https://github.com/puppetlabs/puppetlabs-stdlib/pull/611) ([ntpttr](https://github.com/ntpttr))\n- (MODULES-3507) Updates file_line path validation [#610](https://github.com/puppetlabs/puppetlabs-stdlib/pull/610) ([bmjen](https://github.com/bmjen))\n- (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))\n- Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski))\n- Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1))\n- Mergeback 4.12.x [#603](https://github.com/puppetlabs/puppetlabs-stdlib/pull/603) ([hunner](https://github.com/hunner))\n- (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems))\n- Add the default value to the \"loadyaml\" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin))\n- Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski))\n\n## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0)\n\n### Other\n\n- Remove hard linebreaks [#602](https://github.com/puppetlabs/puppetlabs-stdlib/pull/602) ([hunner](https://github.com/hunner))\n- Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner))\n- (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))\n- 4.12.0 release prep [#596](https://github.com/puppetlabs/puppetlabs-stdlib/pull/596) ([tphoney](https://github.com/tphoney))\n- master to 4.12.x [#595](https://github.com/puppetlabs/puppetlabs-stdlib/pull/595) ([tphoney](https://github.com/tphoney))\n- Update to newest modulesync_configs [9ca280f] [#593](https://github.com/puppetlabs/puppetlabs-stdlib/pull/593) ([DavidS](https://github.com/DavidS))\n- Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski))\n- (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext))\n- Multiple updates to stdlib and its testsuite [#589](https://github.com/puppetlabs/puppetlabs-stdlib/pull/589) ([DavidS](https://github.com/DavidS))\n- (FM-5000) Release prep for 4.12.0. [#587](https://github.com/puppetlabs/puppetlabs-stdlib/pull/587) ([bmjen](https://github.com/bmjen))\n- catch StandardError rather than the gratuitous Exception [#586](https://github.com/puppetlabs/puppetlabs-stdlib/pull/586) ([ffrank](https://github.com/ffrank))\n- [MODULES-2370] file_line.rb: Fix `line` attribute validation [#585](https://github.com/puppetlabs/puppetlabs-stdlib/pull/585) ([](https://github.com/))\n- Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski))\n- MODULES-3201 - Fixed typo 'absense' to 'absence' [#582](https://github.com/puppetlabs/puppetlabs-stdlib/pull/582) ([derekmceachern](https://github.com/derekmceachern))\n- improve suffix function to support the same feature set as prefix [#581](https://github.com/puppetlabs/puppetlabs-stdlib/pull/581) ([vicinus](https://github.com/vicinus))\n- Expose the functions of ruby's built-in Shellwords module [#580](https://github.com/puppetlabs/puppetlabs-stdlib/pull/580) ([Joris-van-der-Wel](https://github.com/Joris-van-der-Wel))\n- Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo))\n- (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen))\n- Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM))\n- 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))\n- Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi))\n- (FM-4046) Update to current msync configs [006831f] [#574](https://github.com/puppetlabs/puppetlabs-stdlib/pull/574) ([DavidS](https://github.com/DavidS))\n- Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m))\n- Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente))\n- (FM-4049) update to modulesync_configs [#569](https://github.com/puppetlabs/puppetlabs-stdlib/pull/569) ([DavidS](https://github.com/DavidS))\n- Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock))\n- Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger))\n- 4.11.0 merge back [#566](https://github.com/puppetlabs/puppetlabs-stdlib/pull/566) ([tphoney](https://github.com/tphoney))\n\n## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0)\n\n### Added\n\n- Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock))\n- Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk))\n\n### Other\n\n- 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))\n- 4.11.0 prep [#564](https://github.com/puppetlabs/puppetlabs-stdlib/pull/564) ([tphoney](https://github.com/tphoney))\n- Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS))\n- (FM-3802) make ensure_resource test of packages [#559](https://github.com/puppetlabs/puppetlabs-stdlib/pull/559) ([DavidS](https://github.com/DavidS))\n- 4.10.x mergeback [#558](https://github.com/puppetlabs/puppetlabs-stdlib/pull/558) ([bmjen](https://github.com/bmjen))\n- adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds))\n\n## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0)\n\n### Other\n\n- edits to README [#557](https://github.com/puppetlabs/puppetlabs-stdlib/pull/557) ([jbondpdx](https://github.com/jbondpdx))\n- Changelog and versionbump for 4.10.0 [#556](https://github.com/puppetlabs/puppetlabs-stdlib/pull/556) ([HelenCampbell](https://github.com/HelenCampbell))\n- 4.9.x Mergeback [#555](https://github.com/puppetlabs/puppetlabs-stdlib/pull/555) ([HelenCampbell](https://github.com/HelenCampbell))\n- (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho))\n\n## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1)\n\n### Other\n\n- Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock))\n- 4.9.1 release prep [#550](https://github.com/puppetlabs/puppetlabs-stdlib/pull/550) ([tphoney](https://github.com/tphoney))\n- Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen))\n- (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv))\n- Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa))\n- pick_default addition to readme [#544](https://github.com/puppetlabs/puppetlabs-stdlib/pull/544) ([HelenCampbell](https://github.com/HelenCampbell))\n- Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt))\n- use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire))\n- Fix capitalize docs [#541](https://github.com/puppetlabs/puppetlabs-stdlib/pull/541) ([mattflaschen](https://github.com/mattflaschen))\n- (#2183) updated str2bool readme wording [#540](https://github.com/puppetlabs/puppetlabs-stdlib/pull/540) ([marrero984](https://github.com/marrero984))\n- 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))\n- add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst))\n- Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy))\n- (MODULES-2421) improve description of file_line [#536](https://github.com/puppetlabs/puppetlabs-stdlib/pull/536) ([DavidS](https://github.com/DavidS))\n- prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer))\n- Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu))\n- Modules 2614 improved numeric value handling on empty function [#533](https://github.com/puppetlabs/puppetlabs-stdlib/pull/533) ([HelenCampbell](https://github.com/HelenCampbell))\n- (FM-3701) Update README for is_a [#532](https://github.com/puppetlabs/puppetlabs-stdlib/pull/532) ([DavidS](https://github.com/DavidS))\n- fixup-PR#506 Speed improvements in facter resolution [#531](https://github.com/puppetlabs/puppetlabs-stdlib/pull/531) ([asasfu](https://github.com/asasfu))\n- Adding update to empty function readme [#530](https://github.com/puppetlabs/puppetlabs-stdlib/pull/530) ([HelenCampbell](https://github.com/HelenCampbell))\n- Update is_a acceptance tests to only run on puppet4 [#528](https://github.com/puppetlabs/puppetlabs-stdlib/pull/528) ([underscorgan](https://github.com/underscorgan))\n- Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan))\n- (MAINT) validate_re: Clarify docs and error message [#526](https://github.com/puppetlabs/puppetlabs-stdlib/pull/526) ([DavidS](https://github.com/DavidS))\n- Clarify what an empty intersection looks like. [#524](https://github.com/puppetlabs/puppetlabs-stdlib/pull/524) ([binford2k](https://github.com/binford2k))\n- (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS))\n- accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds))\n- [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin))\n- Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k))\n\n## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0)\n\n### Other\n\n- [MAINT] Improve 'try_get_value' readme [#519](https://github.com/puppetlabs/puppetlabs-stdlib/pull/519) ([dmitryilyin](https://github.com/dmitryilyin))\n- (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS))\n- 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))\n- 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))\n- Add a new function \"try_get_value\" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin))\n- Consistent Readme [#512](https://github.com/puppetlabs/puppetlabs-stdlib/pull/512) ([Jetroid](https://github.com/Jetroid))\n- (MAINT) improve base64 unit tests [#510](https://github.com/puppetlabs/puppetlabs-stdlib/pull/510) ([DavidS](https://github.com/DavidS))\n- (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid))\n- (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft))\n- Mergeback 4.8.x [#503](https://github.com/puppetlabs/puppetlabs-stdlib/pull/503) ([hunner](https://github.com/hunner))\n- [MODULES-2370] allow `match` parameter to influence `ensure => absent` behavior. [#499](https://github.com/puppetlabs/puppetlabs-stdlib/pull/499) ([](https://github.com/))\n\n## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0)\n\n### Added\n\n- Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer))\n\n### Other\n\n- Sometimes this exits 1 [#502](https://github.com/puppetlabs/puppetlabs-stdlib/pull/502) ([hunner](https://github.com/hunner))\n- Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner))\n- Prep 4.8.0 [#500](https://github.com/puppetlabs/puppetlabs-stdlib/pull/500) ([hunner](https://github.com/hunner))\n- (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal))\n- Remove colorful language from module. [#496](https://github.com/puppetlabs/puppetlabs-stdlib/pull/496) ([big-samantha](https://github.com/big-samantha))\n- 4.7.x [#495](https://github.com/puppetlabs/puppetlabs-stdlib/pull/495) ([hunner](https://github.com/hunner))\n- [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika))\n- (maint) use puppet's utility function instead of API that's not avail… [#493](https://github.com/puppetlabs/puppetlabs-stdlib/pull/493) ([DavidS](https://github.com/DavidS))\n- Fixup acceptance testing [#492](https://github.com/puppetlabs/puppetlabs-stdlib/pull/492) ([DavidS](https://github.com/DavidS))\n- Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl))\n\n## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0)\n\n### Fixed\n\n- 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))\n\n### Other\n\n- disable pw_hash test on sles, as it only supports md5 [#490](https://github.com/puppetlabs/puppetlabs-stdlib/pull/490) ([hunner](https://github.com/hunner))\n- adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc))\n- (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))\n- Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d))\n- Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt))\n- Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan))\n- Add validate_slength's optional 3rd arg to README [#482](https://github.com/puppetlabs/puppetlabs-stdlib/pull/482) ([DavidS](https://github.com/DavidS))\n- prep work for 4.7.0 [#481](https://github.com/puppetlabs/puppetlabs-stdlib/pull/481) ([tphoney](https://github.com/tphoney))\n- catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette))\n- Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314))\n- 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))\n- Document puppet 4 compatability in 4.6 [#475](https://github.com/puppetlabs/puppetlabs-stdlib/pull/475) ([DavidS](https://github.com/DavidS))\n- (maint) getvar: update spec to match implementation [#474](https://github.com/puppetlabs/puppetlabs-stdlib/pull/474) ([DavidS](https://github.com/DavidS))\n- (maint) update PUPPET_VERSION default to be 3.8.1 [#472](https://github.com/puppetlabs/puppetlabs-stdlib/pull/472) ([justinstoller](https://github.com/justinstoller))\n- Updated travisci file to remove allow_failures on Puppet4 [#471](https://github.com/puppetlabs/puppetlabs-stdlib/pull/471) ([jonnytdevops](https://github.com/jonnytdevops))\n- Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish))\n- Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner))\n- Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog))\n- Gemfile: specify minimum rspec-puppet version [#467](https://github.com/puppetlabs/puppetlabs-stdlib/pull/467) ([DavidS](https://github.com/DavidS))\n- Improve fqdn_rotate/fqdn_rand_string acceptance tests [#466](https://github.com/puppetlabs/puppetlabs-stdlib/pull/466) ([elyscape](https://github.com/elyscape))\n- simplify mac address regex [#465](https://github.com/puppetlabs/puppetlabs-stdlib/pull/465) ([igalic](https://github.com/igalic))\n- (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS))\n-  (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))\n- 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))\n- validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS))\n- fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS))\n- Update CHANGELOG.md [#458](https://github.com/puppetlabs/puppetlabs-stdlib/pull/458) ([ghoneycutt](https://github.com/ghoneycutt))\n- DOC-1504: Readme edits [#456](https://github.com/puppetlabs/puppetlabs-stdlib/pull/456) ([jtappa](https://github.com/jtappa))\n- Remove all the pops stuff [#455](https://github.com/puppetlabs/puppetlabs-stdlib/pull/455) ([hunner](https://github.com/hunner))\n- (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape))\n- sync via modulesync [#449](https://github.com/puppetlabs/puppetlabs-stdlib/pull/449) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Restore removed functionality to range() [#447](https://github.com/puppetlabs/puppetlabs-stdlib/pull/447) ([elyscape](https://github.com/elyscape))\n- Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape))\n- Prep work for new specs [#443](https://github.com/puppetlabs/puppetlabs-stdlib/pull/443) ([DavidS](https://github.com/DavidS))\n- uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon))\n- fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS))\n- 4.6.x [#439](https://github.com/puppetlabs/puppetlabs-stdlib/pull/439) ([hunner](https://github.com/hunner))\n\n## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0)\n\n### Added\n\n- Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious))\n- (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm))\n\n### Fixed\n\n- (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))\n\n### Other\n\n- Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner))\n- Prep for 4.6.0 [#437](https://github.com/puppetlabs/puppetlabs-stdlib/pull/437) ([hunner](https://github.com/hunner))\n- 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))\n- Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy))\n- Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy))\n- 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))\n- Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan))\n- Update Travis CI job from current modulesync_configs [#429](https://github.com/puppetlabs/puppetlabs-stdlib/pull/429) ([DavidS](https://github.com/DavidS))\n- Make each function a link in the readme [#428](https://github.com/puppetlabs/puppetlabs-stdlib/pull/428) ([nibalizer](https://github.com/nibalizer))\n- (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman))\n- 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))\n- Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious))\n- Assert private [#422](https://github.com/puppetlabs/puppetlabs-stdlib/pull/422) ([cyberious](https://github.com/cyberious))\n- Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan))\n- 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))\n- Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious))\n- Remove travis badge [#415](https://github.com/puppetlabs/puppetlabs-stdlib/pull/415) ([nibalizer](https://github.com/nibalizer))\n- Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil))\n- Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape))\n- Adding markdown for the range() function's 3rd argument [#410](https://github.com/puppetlabs/puppetlabs-stdlib/pull/410) ([robruma](https://github.com/robruma))\n- (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape))\n- Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews))\n- (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))\n- (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape))\n- Merge 4.6.x back to master [#403](https://github.com/puppetlabs/puppetlabs-stdlib/pull/403) ([cyberious](https://github.com/cyberious))\n- Merge 4.5.x into 4.6.x [#402](https://github.com/puppetlabs/puppetlabs-stdlib/pull/402) ([cyberious](https://github.com/cyberious))\n- Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina))\n\n## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1)\n\n### Other\n\n- 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))\n- Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious))\n- 4.6.x [#397](https://github.com/puppetlabs/puppetlabs-stdlib/pull/397) ([cyberious](https://github.com/cyberious))\n- Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner))\n- FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious))\n- Add IntelliJ files to the ignore list [#394](https://github.com/puppetlabs/puppetlabs-stdlib/pull/394) ([cmurphy](https://github.com/cmurphy))\n- Update docs to reflect new behavior of delete function taking array in second argument [#393](https://github.com/puppetlabs/puppetlabs-stdlib/pull/393) ([cyberious](https://github.com/cyberious))\n- 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))\n- Update README [#391](https://github.com/puppetlabs/puppetlabs-stdlib/pull/391) ([petems](https://github.com/petems))\n- Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan))\n- Merge 4.5.x into master [#388](https://github.com/puppetlabs/puppetlabs-stdlib/pull/388) ([underscorgan](https://github.com/underscorgan))\n- (MODULES-1473) Deprecate type() function for new parser [#382](https://github.com/puppetlabs/puppetlabs-stdlib/pull/382) ([hunner](https://github.com/hunner))\n- (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems))\n- MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems))\n- Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm))\n- Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina))\n- ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette))\n- Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex))\n\n## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0)\n\n### Other\n\n- Remove line match validation [#387](https://github.com/puppetlabs/puppetlabs-stdlib/pull/387) ([hunner](https://github.com/hunner))\n- DOC-1095: edit file_line resource, match parameter [#386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/386) ([jbondpdx](https://github.com/jbondpdx))\n- Doc fixes from master [#384](https://github.com/puppetlabs/puppetlabs-stdlib/pull/384) ([underscorgan](https://github.com/underscorgan))\n- Update README for updated member() functionality [#383](https://github.com/puppetlabs/puppetlabs-stdlib/pull/383) ([underscorgan](https://github.com/underscorgan))\n- 4.5.0 prep [#381](https://github.com/puppetlabs/puppetlabs-stdlib/pull/381) ([underscorgan](https://github.com/underscorgan))\n- Update .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md [#376](https://github.com/puppetlabs/puppetlabs-stdlib/pull/376) ([cmurphy](https://github.com/cmurphy))\n- Add to Readme: Stdlib no longer ships with PE [#373](https://github.com/puppetlabs/puppetlabs-stdlib/pull/373) ([jbondpdx](https://github.com/jbondpdx))\n- FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious))\n- FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx))\n- Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan))\n- Merge 4.4.x [#366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/366) ([underscorgan](https://github.com/underscorgan))\n- Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen))\n- (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen))\n- (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy))\n\n## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0)\n\n### Other\n\n- Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner))\n- Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner))\n- (PUP-3597) Catch :undefined_variable when Future Parser is enabled on 3.7.x [#357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/357) ([hunner](https://github.com/hunner))\n- (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller))\n- Release 4.4.0 [#355](https://github.com/puppetlabs/puppetlabs-stdlib/pull/355) ([hunner](https://github.com/hunner))\n- 4.3.x [#354](https://github.com/puppetlabs/puppetlabs-stdlib/pull/354) ([hunner](https://github.com/hunner))\n- 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))\n- MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious))\n- Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious))\n- 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))\n- 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))\n- Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha))\n- add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious))\n- Merged 4.3.x into master [#339](https://github.com/puppetlabs/puppetlabs-stdlib/pull/339) ([cyberious](https://github.com/cyberious))\n- 4.3.x merged back into master [#337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/337) ([cyberious](https://github.com/cyberious))\n- DOC-248 Revised and updated readme for stdlib module [#335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/335) ([jbondpdx](https://github.com/jbondpdx))\n- 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))\n- Remove simplecov [#322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/322) ([hunner](https://github.com/hunner))\n- 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))\n- Update docs of validate_string to reflect bug [#320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/320) ([JimPanic](https://github.com/JimPanic))\n- Update spec_helper for more consistency [#313](https://github.com/puppetlabs/puppetlabs-stdlib/pull/313) ([underscorgan](https://github.com/underscorgan))\n- Remove simplecov [#308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/308) ([hunner](https://github.com/hunner))\n- (MODULES-1195) Rebase of #202 [#306](https://github.com/puppetlabs/puppetlabs-stdlib/pull/306) ([hunner](https://github.com/hunner))\n- Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish))\n- (MODULES-927) Update readme [#302](https://github.com/puppetlabs/puppetlabs-stdlib/pull/302) ([3flex](https://github.com/3flex))\n- (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin))\n- Modules 707 [#262](https://github.com/puppetlabs/puppetlabs-stdlib/pull/262) ([tremble](https://github.com/tremble))\n\n## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2)\n\n## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1)\n\n### Other\n\n- Prepare a 4.3.2 release. [#299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/299) ([apenney](https://github.com/apenney))\n- Release 4.3.1 [#298](https://github.com/puppetlabs/puppetlabs-stdlib/pull/298) ([hunner](https://github.com/hunner))\n- Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner))\n\n## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0)\n\n### Other\n\n- AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner))\n- Synchronize .travis.yml [#295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/295) ([cmurphy](https://github.com/cmurphy))\n- Release 4.3.0 [#294](https://github.com/puppetlabs/puppetlabs-stdlib/pull/294) ([hunner](https://github.com/hunner))\n- Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner))\n- Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner))\n- has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner))\n- Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy))\n- Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner))\n- Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner))\n- Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner))\n- stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner))\n- Fixed fqdn,getparam and has_interface_with spec tests [#285](https://github.com/puppetlabs/puppetlabs-stdlib/pull/285) ([cyberious](https://github.com/cyberious))\n- Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious))\n- 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))\n- Remove Modulefile; use metadata.json [#282](https://github.com/puppetlabs/puppetlabs-stdlib/pull/282) ([hunner](https://github.com/hunner))\n- Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner))\n- Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner))\n- OS X also has lo0 and can't manage user homedirs [#279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/279) ([hunner](https://github.com/hunner))\n- Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious))\n- Patch ensure_* tests [#277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/277) ([hunner](https://github.com/hunner))\n- (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner))\n- Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink))\n- Rspec3 changes [#268](https://github.com/puppetlabs/puppetlabs-stdlib/pull/268) ([apenney](https://github.com/apenney))\n\n## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2)\n\n## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2)\n\n### Other\n\n- Release 3.2.2 [#267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/267) ([hunner](https://github.com/hunner))\n- Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney))\n- Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney))\n- (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern))\n- Revert \"Merge pull request #256 from stbenjam/2571-before\" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney))\n- (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam))\n- (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern))\n- Prepare a 4.2.1 release. [#254](https://github.com/puppetlabs/puppetlabs-stdlib/pull/254) ([apenney](https://github.com/apenney))\n\n## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1)\n\n### Other\n\n- Prepare a 4.2.1 release. [#254](https://github.com/puppetlabs/puppetlabs-stdlib/pull/254) ([apenney](https://github.com/apenney))\n- Release - 4.2.0 [#252](https://github.com/puppetlabs/puppetlabs-stdlib/pull/252) ([hunner](https://github.com/hunner))\n\n## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0)\n\n### Other\n\n- Release - 4.2.0 [#252](https://github.com/puppetlabs/puppetlabs-stdlib/pull/252) ([hunner](https://github.com/hunner))\n- Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner))\n- Move unit tests to spec/functions [#250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/250) ([hunner](https://github.com/hunner))\n- Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi))\n- Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner))\n- Update build_csv to understand contexts [#246](https://github.com/puppetlabs/puppetlabs-stdlib/pull/246) ([hunner](https://github.com/hunner))\n- Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner))\n- Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner))\n- Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner))\n- Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney))\n- (maint) Remove facter versions test [#239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/239) ([kylog](https://github.com/kylog))\n- (MODULES-603) Add defaults arguments to ensure_packages() [#238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/238) ([Spredzy](https://github.com/Spredzy))\n- Update README.markdown [#236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/236) ([PierreRambaud](https://github.com/PierreRambaud))\n- Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney))\n- Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney))\n- Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney))\n- Numerous changes to update testing gems. [#231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/231) ([apenney](https://github.com/apenney))\n- [WIP] Spec overhaul. [#230](https://github.com/puppetlabs/puppetlabs-stdlib/pull/230) ([apenney](https://github.com/apenney))\n- Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo))\n- hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio))\n- PUP-1724 Don't modify the paramaters to deep_merge [#220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/220) ([jburnham](https://github.com/jburnham))\n\n## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1)\n\n### Other\n\n- Patch metadata [#228](https://github.com/puppetlabs/puppetlabs-stdlib/pull/228) ([hunner](https://github.com/hunner))\n- Supported Release 3.2.1 [#227](https://github.com/puppetlabs/puppetlabs-stdlib/pull/227) ([hunner](https://github.com/hunner))\n- Prepare for supported modules. [#226](https://github.com/puppetlabs/puppetlabs-stdlib/pull/226) ([apenney](https://github.com/apenney))\n- Fix strftime documentation in README [#219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/219) ([petems](https://github.com/petems))\n- Remove trailing whitespace [#218](https://github.com/puppetlabs/puppetlabs-stdlib/pull/218) ([mrwacky42](https://github.com/mrwacky42))\n- (DOCUMENT-21) add docs for file_line to README.markdown [#217](https://github.com/puppetlabs/puppetlabs-stdlib/pull/217) ([teancom](https://github.com/teancom))\n- Enable fast finish in Travis [#216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/216) ([ghoneycutt](https://github.com/ghoneycutt))\n- (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))\n- (doc) Update to point to Jira [#214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/214) ([zaphod42](https://github.com/zaphod42))\n- (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt))\n- Pin rspec-puppet to 0.1.6 for now as the change to 1.0.0 has broken [#210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/210) ([apenney](https://github.com/apenney))\n- 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))\n- Remove unintentional link from README [#207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/207) ([ghoneycutt](https://github.com/ghoneycutt))\n- 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))\n- Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish))\n- (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello))\n- delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello))\n- delete_at added spec to check against bug #20681 [#183](https://github.com/puppetlabs/puppetlabs-stdlib/pull/183) ([lmello](https://github.com/lmello))\n- delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello))\n- Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer))\n- enhanced the error message of pick function. [#179](https://github.com/puppetlabs/puppetlabs-stdlib/pull/179) ([lmello](https://github.com/lmello))\n-  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))\n- (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll))\n- Update file_line resource to support 'after'. [#174](https://github.com/puppetlabs/puppetlabs-stdlib/pull/174) ([dprince](https://github.com/dprince))\n- small fix to delete_values_spec.rb and README.markdown [#172](https://github.com/puppetlabs/puppetlabs-stdlib/pull/172) ([ptomulik](https://github.com/ptomulik))\n- minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik))\n- Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer))\n- extend the validate_slength function to accept a minimum length [#167](https://github.com/puppetlabs/puppetlabs-stdlib/pull/167) ([mhellmic](https://github.com/mhellmic))\n- Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik))\n- ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc))\n- Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence))\n- [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr))\n- Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns))\n- (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline))\n- don't fail on undef variable in merge [#147](https://github.com/puppetlabs/puppetlabs-stdlib/pull/147) ([mhellmic](https://github.com/mhellmic))\n- add a \"step\" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare))\n\n## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0)\n\n### Other\n\n- (#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))\n- Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink))\n\n## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2)\n\n### Other\n\n- adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt))\n\n## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1)\n\n## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0)\n\n### Other\n\n- (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare))\n- Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk))\n- Add missing documentation for validate_augeas and validate_cmd to README.markdown [#132](https://github.com/puppetlabs/puppetlabs-stdlib/pull/132) ([raphink](https://github.com/raphink))\n- (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt))\n- Validate_cmd: Improve tempfile management [#126](https://github.com/puppetlabs/puppetlabs-stdlib/pull/126) ([raphink](https://github.com/raphink))\n- (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune))\n- Tell Travis CI to notify the PDC WebHook [#123](https://github.com/puppetlabs/puppetlabs-stdlib/pull/123) ([jeffmccune](https://github.com/jeffmccune))\n- Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune))\n- Future proof travis build matrix [#121](https://github.com/puppetlabs/puppetlabs-stdlib/pull/121) ([jeffmccune](https://github.com/jeffmccune))\n- (maint) Add Travis CI Support [#120](https://github.com/puppetlabs/puppetlabs-stdlib/pull/120) ([jeffmccune](https://github.com/jeffmccune))\n- Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink))\n- maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen))\n\n## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0)\n\n## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0)\n\n### Other\n\n- Puppet-Lint Cleanup (Spaces + Lines) [#105](https://github.com/puppetlabs/puppetlabs-stdlib/pull/105) ([jfryman](https://github.com/jfryman))\n\n## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1)\n\n### Other\n\n- (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))\n\n## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1)\n\n## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0)\n\n## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0)\n\n### Other\n\n- Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus))\n\n## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1)\n\n### Other\n\n- (Maint) Remove core function documentation from README [#94](https://github.com/puppetlabs/puppetlabs-stdlib/pull/94) ([jeffmccune](https://github.com/jeffmccune))\n- Fix some logical inconsistencies in README [#93](https://github.com/puppetlabs/puppetlabs-stdlib/pull/93) ([ptman](https://github.com/ptman))\n- Disable tests that fail on 2.6.x due to #15912 [#92](https://github.com/puppetlabs/puppetlabs-stdlib/pull/92) ([jeffmccune](https://github.com/jeffmccune))\n- (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune))\n- (#14422) Update README to include the bug tracker URL. [#90](https://github.com/puppetlabs/puppetlabs-stdlib/pull/90) ([ahpook](https://github.com/ahpook))\n- 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))\n- (Maint) Update README for 3.0.0 [#88](https://github.com/puppetlabs/puppetlabs-stdlib/pull/88) ([jeffmccune](https://github.com/jeffmccune))\n\n## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0)\n\n### Other\n\n- Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd))\n- Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd))\n\n## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0)\n\n### Other\n\n- (Maint) use PuppetlabsSpec::PuppetInternals.scope (master) [#83](https://github.com/puppetlabs/puppetlabs-stdlib/pull/83) ([jeffmccune](https://github.com/jeffmccune))\n- (Maint) Don't mock with mocha [#82](https://github.com/puppetlabs/puppetlabs-stdlib/pull/82) ([jeffmccune](https://github.com/jeffmccune))\n- (Maint) Rename PuppetlabsSpec::Puppet{Seams,Internals} [#81](https://github.com/puppetlabs/puppetlabs-stdlib/pull/81) ([jeffmccune](https://github.com/jeffmccune))\n- Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune))\n- (Maint) use PuppetlabsSpec::PuppetSeams.parser_scope [#79](https://github.com/puppetlabs/puppetlabs-stdlib/pull/79) ([jeffmccune](https://github.com/jeffmccune))\n- (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000))\n- (#2157) Remove facter_dot_d for compatibility with external facts [#76](https://github.com/puppetlabs/puppetlabs-stdlib/pull/76) ([HAIL9000](https://github.com/HAIL9000))\n- Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404))\n- Update for new gem version of puppetlabs_spec_helper [#73](https://github.com/puppetlabs/puppetlabs-stdlib/pull/73) ([branan](https://github.com/branan))\n\n## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3)\n\n### Other\n\n- fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong))\n\n## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2)\n\n### Other\n\n- Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune))\n- (#13693) moving logic from local spec_helper to puppetlabs_spec_helper [#61](https://github.com/puppetlabs/puppetlabs-stdlib/pull/61) ([cprice404](https://github.com/cprice404))\n- (#13595) initialize_everything_for_tests couples modules Puppet ver [#60](https://github.com/puppetlabs/puppetlabs-stdlib/pull/60) ([eshamow](https://github.com/eshamow))\n- (#13205) Rotate array/string randomley based on fqdn, fqdn_rotate() [#53](https://github.com/puppetlabs/puppetlabs-stdlib/pull/53) ([traylenator](https://github.com/traylenator))\n\n## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3)\n\n## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1)\n\n### Other\n\n- (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune))\n\n## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0)\n\n### Other\n\n- (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune))\n- Ticket/2.3.x/13018 any on string [#48](https://github.com/puppetlabs/puppetlabs-stdlib/pull/48) ([kbarber](https://github.com/kbarber))\n- (#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))\n- (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune))\n- (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune))\n- (#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))\n- (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence))\n- implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong))\n- Update a documentation comment - facts_dot_d [#33](https://github.com/puppetlabs/puppetlabs-stdlib/pull/33) ([richardc](https://github.com/richardc))\n- (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber))\n- New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza))\n- (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1)\n\n## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2)\n\n### Other\n\n- (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd))\n\n## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0)\n\n### Other\n\n- Update the release process instructions. [#22](https://github.com/puppetlabs/puppetlabs-stdlib/pull/22) ([jeffmccune](https://github.com/jeffmccune))\n-  * v2.x: [#21](https://github.com/puppetlabs/puppetlabs-stdlib/pull/21) ([jamtur01](https://github.com/jamtur01))\n- (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu))\n- (Maint) Make rspec tests work with Puppet 2.6.4 [#18](https://github.com/puppetlabs/puppetlabs-stdlib/pull/18) ([jeffmccune](https://github.com/jeffmccune))\n- (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune))\n- Docs/v2.0.0/xxxx function doc updates [#16](https://github.com/puppetlabs/puppetlabs-stdlib/pull/16) ([nfagerlund](https://github.com/nfagerlund))\n- (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber))\n\n## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1)\n\n## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0)\n\n### Other\n\n- (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune))\n- Issue/master/8797 puppetlabs functions merge [#12](https://github.com/puppetlabs/puppetlabs-stdlib/pull/12) ([kbarber](https://github.com/kbarber))\n\n## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0)\n\n### Other\n\n- Update CHANGELOG and Modulefile for 2.0.0 release [#11](https://github.com/puppetlabs/puppetlabs-stdlib/pull/11) ([jeffmccune](https://github.com/jeffmccune))\n- (#8792) Rename whole_line type to file_line [#10](https://github.com/puppetlabs/puppetlabs-stdlib/pull/10) ([jeffmccune](https://github.com/jeffmccune))\n\n## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0)\n\n## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0)\n\n### Other\n\n- (#8782) Cleanups after puppetlabs-functions merge. [#9](https://github.com/puppetlabs/puppetlabs-stdlib/pull/9) ([kbarber](https://github.com/kbarber))\n\n## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7)\n\n## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6)\n\n### Other\n\n- Ticket/master/3 anchor resource type [#4](https://github.com/puppetlabs/puppetlabs-stdlib/pull/4) ([jeffmccune](https://github.com/jeffmccune))\n\n## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5)\n\n## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4)\n\n## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3)\n\n## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2)\n\n## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1)\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_packages`](#ensure_packages): Deprecated 3x version of the `ensure_packages` function\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): This function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#Stdlib--Compat--Absolute_path): Emulate the is_absolute_path and validate_absolute_path functions\n* [`Stdlib::Compat::Array`](#Stdlib--Compat--Array): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#Stdlib--Compat--Bool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#Stdlib--Compat--Float): Emulate the is_float function\n* [`Stdlib::Compat::Hash`](#Stdlib--Compat--Hash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#Stdlib--Compat--Integer): Emulate the is_integer and validate_integer functions\n* [`Stdlib::Compat::Ip_address`](#Stdlib--Compat--Ip_address): Validate an IP address\n* [`Stdlib::Compat::Ipv4`](#Stdlib--Compat--Ipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#Stdlib--Compat--Ipv6): Validate an IPv6 address\n* [`Stdlib::Compat::Numeric`](#Stdlib--Compat--Numeric): Emulate the is_numeric and validate_numeric functions\n* [`Stdlib::Compat::String`](#Stdlib--Compat--String): Emulate the is_string and validate_string functions\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages(Variant[String[1], Array[String[1]], Hash[String[1], Any]] $packages, Optional[Hash] $default_attributes)`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]], Hash[String[1], Any]]`\n\nThe packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nDeprecated 3x version of the `ensure_packages` function\n\n#### `ensure_packages()`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 4.x API\n\nDEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.\n\n#### `has_interface_with(Any *$args)`\n\nThe has_interface_with function.\n\nReturns: `Any`\n\n##### `*args`\n\nData type: `Any`\n\n\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n#### `round()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n##### Examples\n\n###### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--has_interface_with\"></a>`stdlib::has_interface_with`\n\nType: Ruby 4.x API\n\nCan be called with one, or two arguments.\n\n#### `stdlib::has_interface_with(String[1] $interface)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if `interface` exists and `false` otherwise\n\n##### Examples\n\n###### When called with a single argument, the presence of the interface is checked\n\n```puppet\nstdlib::has_interface_with('lo') # Returns `true`\n```\n\n##### `interface`\n\nData type: `String[1]`\n\nThe name of an interface\n\n#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`\n\nThe stdlib::has_interface_with function.\n\nReturns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`\n\n##### Examples\n\n###### Checking if an interface exists with a given mac address\n\n```puppet\nstdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`\n```\n\n###### Checking if an interface exists with a given IP address\n\n```puppet\nstdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`\n```\n\n##### `kind`\n\nData type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`\n\nA supported interface attribute\n\n##### `value`\n\nData type: `String[1]`\n\nThe value of the attribute\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n#### `to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--Compat--Absolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of `Variant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]`\n\n### <a name=\"Stdlib--Compat--Array\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of `Array[Any]`\n\n### <a name=\"Stdlib--Compat--Bool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of `Boolean`\n\n### <a name=\"Stdlib--Compat--Float\"></a>`Stdlib::Compat::Float`\n\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]`\n\n### <a name=\"Stdlib--Compat--Hash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of `Hash[Any, Any]`\n\n### <a name=\"Stdlib--Compat--Integer\"></a>`Stdlib::Compat::Integer`\n\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]`\n\n### <a name=\"Stdlib--Compat--Ip_address\"></a>`Stdlib::Compat::Ip_address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]`\n\n### <a name=\"Stdlib--Compat--Ipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of `Pattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]`\n\n### <a name=\"Stdlib--Compat--Ipv6\"></a>`Stdlib::Compat::Ipv6`\n\nValidate an IPv6 address\n\nAlias of `Pattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]`\n\n### <a name=\"Stdlib--Compat--Numeric\"></a>`Stdlib::Compat::Numeric`\n\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]`\n\n### <a name=\"Stdlib--Compat--String\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of `Optional[String]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "ZTU3ZGEyZThmN2QxNDM2Nzk2ODFmODQ4Mjk3ZDNlNDk6MTY4NzM4NzY0NA==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/c84c214afbefde63765d74f0a312ce07d5fcca3b501d2fef71553a2212340dca",
            "self": "https://www.virustotal.com/api/v3/analyses/ZTU3ZGEyZThmN2QxNDM2Nzk2ODFmODQ4Mjk3ZDNlNDk6MTY4NzM4NzY0NA=="
          },
          "attributes": {
            "date": 1687387644,
            "stats": {
              "failure": 1,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 58,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230621",
                "engine_version": "22.11.7701.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230619",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230621",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230619",
                "engine_version": "6.424"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230619",
                "engine_version": "2.0.0.1"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230621",
                "engine_version": "12.93.48713"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230621",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230621",
                "engine_version": "22.11.7701.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230621",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230621",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230621",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230621",
                "engine_version": "7.0.59.12300"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230621",
                "engine_version": "A:25.36067B:27.32139"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230621",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230621",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230621",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230621",
                "engine_version": "9.5.474"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230621",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230621",
                "engine_version": "1.1.0.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230621",
                "engine_version": "1687384828"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230621",
                "engine_version": "6.1.14.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230621",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230621",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230621",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230621",
                "engine_version": "2.3.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230621",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230621",
                "engine_version": "2.0.0.4899"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230219",
                "engine_version": "1.2.0.114"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230621",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230607",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230620",
                "engine_version": "4.0.95"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230621",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230616",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230621",
                "engine_version": "2023-06-21.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "failure",
                "engine_name": "Tencent",
                "engine_update": "20230621",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230621",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230621",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230621",
                "engine_version": "35756"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230621",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230621",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230621",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230621",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230620",
                "engine_version": "16.0.100"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230621",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230621",
                "engine_version": "1.20.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230412",
                "engine_version": "4.0.14.446"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230621",
                "engine_version": "3.23.3.10396"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230621",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230621",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230620",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230621",
                "engine_version": "1.1.23050.3"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230621",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230621",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230621",
                "engine_version": "27446"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230621",
                "engine_version": "1.0.125.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230621",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230621",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230621",
                "engine_version": "12.93.48713"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230404",
                "engine_version": "23.2.0.1"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230621",
                "engine_version": "230621-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230619",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230621",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230620",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230621",
                "engine_version": "1.0.146.25785"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230511",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230621",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230621",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230619",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230621",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230621",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "e57da2e8f7d143679681f848297d3e49",
            "sha1": "8bf30be7a4499329a626d896fb481a8009761a64",
            "size": 177233,
            "sha256": "c84c214afbefde63765d74f0a312ce07d5fcca3b501d2fef71553a2212340dca"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-05-30 07:25:38 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.6.0",
      "slug": "puppetlabs-stdlib-8.6.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.6.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.6.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.5.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "2.7.1-0-g9a16c87"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.6.0.tar.gz",
      "file_size": 188727,
      "file_md5": "26d6b65e010857b4d7445d82156bdad1",
      "file_sha256": "5bbaf59faf684726ca683ecddd5f62da34a725cdda6eabb6141db824431b807b",
      "downloads": 173491,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)\n\n### Added\n\n- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))\n- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))\n- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))\n- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))\n\n### Fixed\n\n- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))\n- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))\n- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))\n- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))\n- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))\n- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))\n- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))\n- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) (2022-10-13)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [\\#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - \\(GH-cat-11\\) Certify Support for Ubuntu 22.04 [\\#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- \\(FEAT\\) Add function parsepson [\\#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\(CONT-200\\) Fix require relative paths [\\#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - \\(CONT-189\\) Remove support for RedHat6 / OracleLinux6 / Scientific6 [\\#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(CONT-130\\) - Dropping Support for Debian 9 [\\#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- \\(MAINT\\) Drop support for AIX + Windows EOL OSs [\\#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- \\(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))\n- Switch parsejson\\(\\) from PSON to JSON parsing [\\#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) (2022-07-21)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [\\#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) (2022-07-11)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - \\(GH-cat-12\\) Add Support for Redhat 9 [\\#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [\\#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- \\(MODULES-2892\\) Handle missing file in file\\_line [\\#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [\\#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [\\#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http\\_basic\\_authentication if not needed [\\#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) (2022-05-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [\\#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-4976\\) Add windows escaping functions [\\#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [\\#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - \\(FM-8922\\) - Add Support for Windows 2022 [\\#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-11196\\) Add support for AIX 7.2 [\\#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(IAC-1753\\) - Add Support for AlmaLinux 8 [\\#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [\\#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- \\(maint\\) Update str2saltedpbkdf2.rb to use the correct salt length [\\#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [\\#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - \\(IAC-1787\\) Remove Support for CentOS 6 [\\#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to\\_python\\(\\) [\\#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in puppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_packages`](#ensure_packages): Deprecated 3x version of the `ensure_packages` function\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): This function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.\n* [`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 \n* [`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.\n* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.\n* [`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.\n* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.\n* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String\n* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#Stdlib--Compat--Absolute_path): Emulate the is_absolute_path and validate_absolute_path functions\n* [`Stdlib::Compat::Array`](#Stdlib--Compat--Array): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#Stdlib--Compat--Bool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#Stdlib--Compat--Float): Emulate the is_float function\n* [`Stdlib::Compat::Hash`](#Stdlib--Compat--Hash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#Stdlib--Compat--Integer): Emulate the is_integer and validate_integer functions\n* [`Stdlib::Compat::Ip_address`](#Stdlib--Compat--Ip_address): Validate an IP address\n* [`Stdlib::Compat::Ipv4`](#Stdlib--Compat--Ipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#Stdlib--Compat--Ipv6): Validate an IPv6 address\n* [`Stdlib::Compat::Numeric`](#Stdlib--Compat--Numeric): Emulate the is_numeric and validate_numeric functions\n* [`Stdlib::Compat::String`](#Stdlib--Compat--String): Emulate the is_string and validate_string functions\n* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data\n* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package\n* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode\n* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)\n* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs\n* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110\n* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address\n* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address\n* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#Stdlib--Port): Validate a port number\n* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlib--manage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#-stdlib--manage--create_resources)\n\n##### <a name=\"-stdlib--manage--create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlib--stages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#-anchor--name)\n\n##### <a name=\"-anchor--name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#-file_line--after)\n* [`append_on_no_match`](#-file_line--append_on_no_match)\n* [`encoding`](#-file_line--encoding)\n* [`match`](#-file_line--match)\n* [`match_for_absence`](#-file_line--match_for_absence)\n* [`multiple`](#-file_line--multiple)\n* [`name`](#-file_line--name)\n* [`path`](#-file_line--path)\n* [`provider`](#-file_line--provider)\n* [`replace`](#-file_line--replace)\n* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)\n\n##### <a name=\"-file_line--after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"-file_line--append_on_no_match\"></a>`append_on_no_match`\n\nValid values: `true`, `false`\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"-file_line--match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"-file_line--match_for_absence\"></a>`match_for_absence`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: `false`\n\n##### <a name=\"-file_line--multiple\"></a>`multiple`\n\nValid values: `true`, `false`\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"-file_line--name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"-file_line--path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"-file_line--provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"-file_line--replace\"></a>`replace`\n\nValid values: `true`, `false`\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: `true`\n\n##### <a name=\"-file_line--replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: `true`, `false`\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: `false`\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages(Variant[String[1], Array[String[1]], Hash[String[1], Any]] $packages, Optional[Hash] $default_attributes)`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]], Hash[String[1], Any]]`\n\nThe packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nDeprecated 3x version of the `ensure_packages` function\n\n#### `ensure_packages()`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use. For bcrypt-type hashes,\nthe first two characters of the salt represent a strength parameter, with a value\nbetween 4 and 31 inclusive.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n#### `round()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n##### Examples\n\n###### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlib--crc32\"></a>`stdlib::crc32`\n\nType: Ruby 4.x API\n\nRun a CRC32 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n##### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a CRC32 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::crc32('my string') == '18fbd270'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::crc32(sensitive('my string')) == '18fbd270'\n```\n\n###### Check a number\n\n```puppet\nstdlib::crc32(100.0) == 'a3fd429a'\nstdlib::crc32(100.00000) == 'a3fd429a'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--deferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlib--end_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlib--ensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`\n\n\n\n### <a name=\"stdlib--extname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlib--ip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlib--sha256\"></a>`stdlib::sha256`\n\nType: Ruby 4.x API\n\nRun a SHA256 calculation against a given value.\n\n#### Examples\n\n##### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n##### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`\n\nRun a SHA256 calculation against a given value.\n\nReturns: `String` String\n\n##### Examples\n\n###### Check a simple string value\n\n```puppet\nstdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a Sensitive datatype\n\n```puppet\nstdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'\n```\n\n###### Check a number\n\n```puppet\nstdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\nstdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'\n```\n\n##### `my_data`\n\nData type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`\n\nThe ScalarData to evaluate\n\n### <a name=\"stdlib--start_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlib--str2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlib--xml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n#### `to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type:\n\n```puppet\nOptional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]\n```\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"Stdlib--Absolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`\n\n### <a name=\"Stdlib--Base32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of `Pattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]`\n\n### <a name=\"Stdlib--Base64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of `Pattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]`\n\n### <a name=\"Stdlib--Compat--Absolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of `Variant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]`\n\n### <a name=\"Stdlib--Compat--Array\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of `Array[Any]`\n\n### <a name=\"Stdlib--Compat--Bool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of `Boolean`\n\n### <a name=\"Stdlib--Compat--Float\"></a>`Stdlib::Compat::Float`\n\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]`\n\n### <a name=\"Stdlib--Compat--Hash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of `Hash[Any, Any]`\n\n### <a name=\"Stdlib--Compat--Integer\"></a>`Stdlib::Compat::Integer`\n\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]`\n\n### <a name=\"Stdlib--Compat--Ip_address\"></a>`Stdlib::Compat::Ip_address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]`\n\n### <a name=\"Stdlib--Compat--Ipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of `Pattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]`\n\n### <a name=\"Stdlib--Compat--Ipv6\"></a>`Stdlib::Compat::Ipv6`\n\nValidate an IPv6 address\n\nAlias of `Pattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]`\n\n### <a name=\"Stdlib--Compat--Numeric\"></a>`Stdlib::Compat::Numeric`\n\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of `Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]`\n\n### <a name=\"Stdlib--Compat--String\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of `Optional[String]`\n\n### <a name=\"Stdlib--CreateResources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of `Hash[String[1], Hash[String[1], Any]]`\n\n### <a name=\"Stdlib--Datasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of `Pattern[/^\\d+(?i:[kmgt]b?|b)$/]`\n\n### <a name=\"Stdlib--Email\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--Ensure--File\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of `Enum['present', 'file', 'directory', 'link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Directory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of `Enum['directory', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--File\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of `Enum['file', 'absent']`\n\n### <a name=\"Stdlib--Ensure--File--Link\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of `Enum['link', 'absent']`\n\n### <a name=\"Stdlib--Ensure--Package\"></a>`Stdlib::Ensure::Package`\n\nValidate the value of the ensure parameter for a package\n\nAlias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`\n\n### <a name=\"Stdlib--Ensure--Service\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of `Enum['stopped', 'running']`\n\n### <a name=\"Stdlib--Filemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of `Pattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]`\n\n### <a name=\"Stdlib--Filesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"Stdlib--Fqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias 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/]`\n\n### <a name=\"Stdlib--HTTPSUrl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of `Pattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--HTTPUrl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of `Pattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]`\n\n### <a name=\"Stdlib--Host\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of `Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]`\n\n### <a name=\"Stdlib--Http--Method\"></a>`Stdlib::Http::Method`\n\nValid HTTP method verbs\n\n* **See also**\n  * https://www.iana.org/assignments/http-methods/http-methods.xhtml\n\nAlias 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']`\n\n### <a name=\"Stdlib--Http--Status\"></a>`Stdlib::Http::Status`\n\nA valid HTTP status code per RFC9110\n\n* **See also**\n  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes\n\nAlias of `Integer[100, 599]`\n\n### <a name=\"Stdlib--HttpStatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\n* **See also**\n  * Stdlib::Http::Status\n\nAlias of `Stdlib::Http::Status`\n\n### <a name=\"Stdlib--IP--Address\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`\n\n### <a name=\"Stdlib--IP--Address--Nosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V4--CIDR\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V4--Nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`\n\n### <a name=\"Stdlib--IP--Address--V6--Alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--CIDR\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Alternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Compressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias 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/]`\n\n### <a name=\"Stdlib--IP--Address--V6--Nosubnet--Full\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of `Pattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]`\n\n### <a name=\"Stdlib--MAC\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias 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/]`\n\n### <a name=\"Stdlib--ObjectStore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`\n\n### <a name=\"Stdlib--ObjectStore--GSUri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of `Pattern[/\\Ags:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--ObjectStore--S3Uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of `Pattern[/\\As3:\\/\\/.*\\z/]`\n\n### <a name=\"Stdlib--Port\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of `Integer[0, 65535]`\n\n### <a name=\"Stdlib--Port--Dynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of `Integer[49152, 65535]`\n\n### <a name=\"Stdlib--Port--Ephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of `Stdlib::Port::Dynamic`\n\n### <a name=\"Stdlib--Port--Privileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of `Integer[1, 1023]`\n\n### <a name=\"Stdlib--Port--Registered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of `Stdlib::Port::User`\n\n### <a name=\"Stdlib--Port--Unprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of `Integer[1024, 65535]`\n\n### <a name=\"Stdlib--Port--User\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of `Integer[1024, 49151]`\n\n### <a name=\"Stdlib--Syslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias 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']`\n\n### <a name=\"Stdlib--Unixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of `Pattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]`\n\n### <a name=\"Stdlib--Windowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of `Pattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]`\n\n### <a name=\"Stdlib--Yes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of `Pattern[/\\A(?i:(yes|no))\\z/]`\n\n",
      "malware_scan": {
        "data": {
          "id": "MjZkNmI2NWUwMTA4NTdiNGQ3NDQ1ZDgyMTU2YmRhZDE6MTY4MjM1MjI2OQ==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/5bbaf59faf684726ca683ecddd5f62da34a725cdda6eabb6141db824431b807b",
            "self": "https://www.virustotal.com/api/v3/analyses/MjZkNmI2NWUwMTA4NTdiNGQ3NDQ1ZDgyMTU2YmRhZDE6MTY4MjM1MjI2OQ=="
          },
          "attributes": {
            "date": 1682352269,
            "stats": {
              "failure": 0,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 59,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20230424",
                "engine_version": "22.11.7701.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20230424",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20230424",
                "engine_version": "2023.1.4.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20230416",
                "engine_version": "6.408"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20230424",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20230424",
                "engine_version": "12.82.47900"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20230424",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20230424",
                "engine_version": "22.11.7701.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20230424",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20230424",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20230424",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20230424",
                "engine_version": "7.0.59.12300"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20230424",
                "engine_version": "A:25.35705B:27.31447"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20230424",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20230421",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20230424",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20230424",
                "engine_version": "9.5.435"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20230424",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20230424",
                "engine_version": "1.0.1.0"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20230424",
                "engine_version": "1682348441"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20230424",
                "engine_version": "6.1.14.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20230424",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20230424",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20230424",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20230424",
                "engine_version": "2.1.2.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20230424",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20230424",
                "engine_version": "2.0.0.4859"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20230219",
                "engine_version": "1.2.0.114"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20230424",
                "engine_version": "2022.0.0.18"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20230419",
                "engine_version": "2.0.0.0"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20230413",
                "engine_version": "4.0.85"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20230424",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20230421",
                "engine_version": "2.23.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20230424",
                "engine_version": "2023-04-24.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20230424",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20230424",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20230424",
                "engine_version": "1.0.0.403"
              },
              "Xcitium": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Xcitium",
                "engine_update": "20230423",
                "engine_version": "35585"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20230424",
                "engine_version": "v0.1.4"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20230424",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20230424",
                "engine_version": "18.10.1137.128"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20230424",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20230423",
                "engine_version": "16.0.100"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20230424",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20230424",
                "engine_version": "1.19.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20230412",
                "engine_version": "4.0.14.446"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20230424",
                "engine_version": "3.23.2.10388"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20230424",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20230424",
                "engine_version": "22.0.1.28"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20230424",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20230424",
                "engine_version": "1.1.20200.4"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20230424",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20230424",
                "engine_version": "1.0"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20230424",
                "engine_version": "27122"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20230424",
                "engine_version": "1.0.114.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20230424",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20230424",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220812",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20230424",
                "engine_version": "12.82.47901"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20230404",
                "engine_version": "23.2.0.1"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20230424",
                "engine_version": "230424-00"
              },
              "DeepInstinct": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "DeepInstinct",
                "engine_update": "20230420",
                "engine_version": "3.1.0.15"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20230424",
                "engine_version": "4.5.5.54"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20230423",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20230424",
                "engine_version": "1.0.146.25755"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20230419",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20230418",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20230424",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20230423",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20230424",
                "engine_version": "v2021.2.0+4045"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20230424",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20230119",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "26d6b65e010857b4d7445d82156bdad1",
            "sha1": "866caec55a74817a29b85d6a1467c08aa2cba948",
            "size": 188727,
            "sha256": "5bbaf59faf684726ca683ecddd5f62da34a725cdda6eabb6141db824431b807b"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2023-04-24 09:01:59 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.5.0",
      "slug": "puppetlabs-stdlib-8.5.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.5.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.5.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "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": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.5.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "tags/2.6.0-0-gd0490b9"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.5.0.tar.gz",
      "file_size": 189542,
      "file_md5": "6fc55257a61b359e180fe5ed9f4c1330",
      "file_sha256": "6ec37b310d76dc2ecf3b6b553c39466583d519652a058e12a0986843e350898f",
      "downloads": 97567,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) (2022-10-13)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)\n\n### Added\n\n- Add a Stdlib::CreateResources type [\\#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl))\n- pdksync - \\(GH-cat-11\\) Certify Support for Ubuntu 22.04 [\\#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan))\n- \\(FEAT\\) Add function parsepson [\\#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\(CONT-200\\) Fix require relative paths [\\#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak))\n- pdksync - \\(CONT-189\\) Remove support for RedHat6 / OracleLinux6 / Scientific6 [\\#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(CONT-130\\) - Dropping Support for Debian 9 [\\#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28))\n- \\(MAINT\\) Drop support for AIX + Windows EOL OSs [\\#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28))\n- \\(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))\n- Switch parsejson\\(\\) from PSON to JSON parsing [\\#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil))\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) (2022-07-21)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [\\#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) (2022-07-11)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - \\(GH-cat-12\\) Add Support for Redhat 9 [\\#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [\\#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- \\(MODULES-2892\\) Handle missing file in file\\_line [\\#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [\\#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [\\#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http\\_basic\\_authentication if not needed [\\#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) (2022-05-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [\\#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-4976\\) Add windows escaping functions [\\#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [\\#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - \\(FM-8922\\) - Add Support for Windows 2022 [\\#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-11196\\) Add support for AIX 7.2 [\\#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(IAC-1753\\) - Add Support for AlmaLinux 8 [\\#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [\\#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- \\(maint\\) Update str2saltedpbkdf2.rb to use the correct salt length [\\#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [\\#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - \\(IAC-1787\\) Remove Support for CentOS 6 [\\#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to\\_python\\(\\) [\\#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in puppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlibmanage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_packages`](#ensure_packages): Deprecated 3x version of the `ensure_packages` function\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parsepson`](#parsepson): This function accepts PSON, a Puppet variant of JSON, as a string and converts\nit into the correct Puppet structure\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::deferrable_epp`](#stdlibdeferrable_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 \n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::str2resource`](#stdlibstr2resource): This converts a string to a puppet resource.\n* [`stdlib::xml_encode`](#stdlibxml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address): Validate an IP address\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6): Validate an IPv6 address\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::CreateResources`](#stdlibcreateresources): A type description used for the create_resources function\n* [`Stdlib::Datasize`](#stdlibdatasize): Validate the size of data\n* [`Stdlib::Email`](#stdlibemail): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#stdlibensurefile): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Service`](#stdlibensureservice): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#stdlibfilemode): Validate a file mode\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#stdlibhost): Validate a host (FQDN or IP address)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#stdlibipaddress): Validate an IP address\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#stdlibport): Validate a port number\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#stdlibportregistered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#stdlibportuser): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#stdlibunixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#stdlibwindowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#stdlibyes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlibmanage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#create_resources)\n\n##### <a name=\"create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages(Variant[String[1], Array[String[1]], Hash[String[1], Any]] $packages, Optional[Hash] $default_attributes)`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]], Hash[String[1], Any]]`\n\nThe packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nDeprecated 3x version of the `ensure_packages` function\n\n#### `ensure_packages()`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of the JSON string failed or if the JSON parse\n  evaluated to nil.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parsepson\"></a>`parsepson`\n\nType: Ruby 4.x API\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\n#### Examples\n\n##### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n#### `parsepson(String[1] $pson_string, Optional[Any] $default)`\n\nFor more information on PSON please see the following link:\nhttps://puppet.com/docs/puppet/7/http_api/pson.html\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse pson\n\n```puppet\n$data = parsepson('{\"a\":\"1\",\"b\":\"2\"}')\n```\n\n##### `pson_string`\n\nData type: `String[1]`\n\nA valid PSON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing the pson_string fails\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n#### `round()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n##### Examples\n\n###### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibdeferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlibstr2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlibxml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n#### `to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibcreateresources\"></a>`Stdlib::CreateResources`\n\nA type description used for the create_resources function\n\n#### Examples\n\n##### As a class parameter\n\n```puppet\nclass myclass (\n  Stdlib::CreateResources $myresources = {},\n) {\n  # Using create_resources\n  create_resources('myresource', $myresources)\n\n  # Using iteration\n  $myresources.each |$myresource_name, $myresource_attrs| {\n    myresource { $myresource_name:\n      * => $myresource_attrs,\n    }\n  }\n}\n```\n\nAlias of\n\n```puppet\nHash[String[1], Hash[String[1], Any]]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "NmZjNTUyNTdhNjFiMzU5ZTE4MGZlNWVkOWY0YzEzMzA6MTY2NTY1NTQyNw==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/6ec37b310d76dc2ecf3b6b553c39466583d519652a058e12a0986843e350898f",
            "self": "https://www.virustotal.com/api/v3/analyses/NmZjNTUyNTdhNjFiMzU5ZTE4MGZlNWVkOWY0YzEzMzA6MTY2NTY1NTQyNw=="
          },
          "attributes": {
            "date": 1665655427,
            "stats": {
              "failure": 0,
              "timeout": 0,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 61,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "AVG": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AVG",
                "engine_update": "20221013",
                "engine_version": "21.1.5827.0"
              },
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20221013",
                "engine_version": "2.4.2022.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20221013",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20221013",
                "engine_version": "6.344"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20221013",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20221013",
                "engine_version": "12.42.44802"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20221013",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20221013",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20221013",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20221013",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20221013",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20221013",
                "engine_version": "7.0.58.8230"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20221013",
                "engine_version": "A:25.34189B:27.29154"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20221012",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20221013",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20221012",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20221012",
                "engine_version": "9.5.302"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20221012",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20221013",
                "engine_version": "0.105.1.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20221012",
                "engine_version": "35072"
              },
              "Google": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Google",
                "engine_update": "20221013",
                "engine_version": "1665651639"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20221013",
                "engine_version": "6.0.26.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Lionic",
                "engine_update": "20221013",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20221013",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20221013",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20221013",
                "engine_version": "1.4.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20221013",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20221012",
                "engine_version": "2.0.0.4731"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20220426",
                "engine_version": "1.2.0.108"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20221013",
                "engine_version": "1.0.0.889"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20221013",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20221010",
                "engine_version": "4.0.50"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20221013",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20220929",
                "engine_version": "2.21.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20221013",
                "engine_version": "2022-10-13.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20221013",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20221013",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20221013",
                "engine_version": "1.0.0.403"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20221013",
                "engine_version": null
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20221013",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20221013",
                "engine_version": "2022.6.0.32461"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20221013",
                "engine_version": "18.10.978.51"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20221013",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20221013",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20221013",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20221013",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20221013",
                "engine_version": "1.19.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20220907",
                "engine_version": "4.0.1.119"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20221013",
                "engine_version": "3.22.2.10299"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20221013",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20221013",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20221013",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20221013",
                "engine_version": "1.1.19700.3"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20221013",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20221013",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20221013",
                "engine_version": "26080"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20221013",
                "engine_version": "1.0.96.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20221013",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20221013",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": null,
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20221013",
                "engine_version": "12.42.44803"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20221003",
                "engine_version": "22.3.2.9"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20221012",
                "engine_version": "221012-00"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20221013",
                "engine_version": "4.3.3.37"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20221013",
                "engine_version": "22.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20221013",
                "engine_version": "1.0.146.25648"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20220103",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20221012",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20221013",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20221008",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20221013",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20221013",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20220208",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "6fc55257a61b359e180fe5ed9f4c1330",
            "sha1": "580f67eef853748d39ff111ad2e425ff966dd0b1",
            "size": 189542,
            "sha256": "6ec37b310d76dc2ecf3b6b553c39466583d519652a058e12a0986843e350898f"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2022-10-13 03:02:54 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.4.0",
      "slug": "puppetlabs-stdlib-8.4.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.4.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.4.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8",
              "9"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "9",
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "7",
              "8.1",
              "10",
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "2022"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1",
              "7.2"
            ]
          },
          {
            "operatingsystem": "Rocky",
            "operatingsystemrelease": [
              "8"
            ]
          },
          {
            "operatingsystem": "AlmaLinux",
            "operatingsystemrelease": [
              "8"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.3.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g806810b"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.4.0.tar.gz",
      "file_size": 188384,
      "file_md5": "c331124ca16ca0bb655cd3baf233a36d",
      "file_sha256": "6d212aadbcfacb78560e1e58b9faa424c9be493e49c136650b1fd0566850e922",
      "downloads": 48490,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) (2022-07-21)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0)\n\n### Added\n\n- deferrable epp function simplifying deferred templates [\\#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k))\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) (2022-07-11)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - \\(GH-cat-12\\) Add Support for Redhat 9 [\\#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [\\#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- \\(MODULES-2892\\) Handle missing file in file\\_line [\\#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [\\#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [\\#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http\\_basic\\_authentication if not needed [\\#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) (2022-05-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [\\#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-4976\\) Add windows escaping functions [\\#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [\\#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - \\(FM-8922\\) - Add Support for Windows 2022 [\\#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-11196\\) Add support for AIX 7.2 [\\#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(IAC-1753\\) - Add Support for AlmaLinux 8 [\\#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [\\#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- \\(maint\\) Update str2saltedpbkdf2.rb to use the correct salt length [\\#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [\\#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - \\(IAC-1787\\) Remove Support for CentOS 6 [\\#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to\\_python\\(\\) [\\#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlibmanage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_packages`](#ensure_packages): Deprecated 3x version of the `ensure_packages` function\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::deferrable_epp`](#stdlibdeferrable_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 \n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::str2resource`](#stdlibstr2resource): This converts a string to a puppet resource.\n* [`stdlib::xml_encode`](#stdlibxml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address): Validate an IP address\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6): Validate an IPv6 address\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize): Validate the size of data\n* [`Stdlib::Email`](#stdlibemail): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#stdlibensurefile): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Service`](#stdlibensureservice): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#stdlibfilemode): Validate a file mode\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#stdlibhost): Validate a host (FQDN or IP address)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#stdlibipaddress): Validate an IP address\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#stdlibport): Validate a port number\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#stdlibportregistered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#stdlibportuser): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#stdlibunixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#stdlibwindowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#stdlibyes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlibmanage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#create_resources)\n\n##### <a name=\"create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages(Variant[String[1], Array[String[1]], Hash[String[1], Any]] $packages, Optional[Hash] $default_attributes)`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]], Hash[String[1], Any]]`\n\nThe packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nDeprecated 3x version of the `ensure_packages` function\n\n#### `ensure_packages()`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n#### `round()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n##### Examples\n\n###### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibdeferrable_epp\"></a>`stdlib::deferrable_epp`\n\nType: Puppet Language\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\n#### `stdlib::deferrable_epp(String $template, Hash $variables)`\n\nThis function returns either a rendered template or a deferred function to render at runtime.\nIf any of the values in the variables hash are deferred, then the template will be deferred.\n\nNote: this function requires all parameters to be explicitly passed in. It cannot expect to\nuse facts, class variables, and other variables in scope. This is because when deferred, we\nhave to explicitly pass the entire scope to the client.\n\nReturns: `Variant[String, Deferred]`\n\n##### `template`\n\nData type: `String`\n\n\n\n##### `variables`\n\nData type: `Hash`\n\n\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlibstr2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlibxml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n#### `to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "YzMzMTEyNGNhMTZjYTBiYjY1NWNkM2JhZjIzM2EzNmQ6MTY1ODQxMDE3Mg==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/6d212aadbcfacb78560e1e58b9faa424c9be493e49c136650b1fd0566850e922",
            "self": "https://www.virustotal.com/api/v3/analyses/YzMzMTEyNGNhMTZjYTBiYjY1NWNkM2JhZjIzM2EzNmQ6MTY1ODQxMDE3Mg=="
          },
          "attributes": {
            "date": 1658410172,
            "stats": {
              "failure": 0,
              "timeout": 1,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 57,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20220721",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20220719",
                "engine_version": "6.314"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20220721",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20220721",
                "engine_version": "12.26.43444"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20220721",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20220721",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20220721",
                "engine_version": "8.3.3.16"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20220721",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20220721",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20220721",
                "engine_version": "7.0.56.4040"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20220721",
                "engine_version": "A:25.33553B:27.28155"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20220721",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20220721",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20220721",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20220721",
                "engine_version": "9.5.242"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20220720",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20220721",
                "engine_version": "0.105.0.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20220721",
                "engine_version": "34824"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20220721",
                "engine_version": "6.0.24.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Lionic",
                "engine_update": "20220721",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20220721",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20220721",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20220721",
                "engine_version": "1.4.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20220721",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20220721",
                "engine_version": "2.0.0.4675"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20220426",
                "engine_version": "1.2.0.108"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20220721",
                "engine_version": "1.0.0.889"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20220721",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20220623",
                "engine_version": "4.0.40"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20220721",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20220720",
                "engine_version": "2.14.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20220721",
                "engine_version": "2022-07-21.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20220721",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20220721",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20220721",
                "engine_version": "1.0.0.403"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20220721",
                "engine_version": null
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20220721",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20220721",
                "engine_version": "2021.5.0.7597"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20220721",
                "engine_version": "18.10.978.51"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20220721",
                "engine_version": "6.4.258.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20220720",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20220721",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20220721",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20220721",
                "engine_version": "1.18.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20220707",
                "engine_version": "3.5.48.101"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20220721",
                "engine_version": "3.22.1.10283"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20220721",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20220721",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20220721",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20220721",
                "engine_version": "1.1.19400.3"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20220721",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20220721",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20220721",
                "engine_version": "25627"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20220721",
                "engine_version": "1.0.85.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20220721",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20220721",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": null,
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20220721",
                "engine_version": "12.26.43445"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20220330",
                "engine_version": "22.2.1.2"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20220721",
                "engine_version": "220721-00"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20220721",
                "engine_version": "4.3.3.37"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20220720",
                "engine_version": "14.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20220721",
                "engine_version": "1.0.146.25618"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20220103",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20220718",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20220721",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20220716",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20220721",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20220721",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20220208",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "c331124ca16ca0bb655cd3baf233a36d",
            "sha1": "1f24400c685837f6e142de5c01c4e92b05561b07",
            "size": 188384,
            "sha256": "6d212aadbcfacb78560e1e58b9faa424c9be493e49c136650b1fd0566850e922"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2022-07-21 06:28:39 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.3.0",
      "slug": "puppetlabs-stdlib-8.3.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.3.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.3.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8",
              "9"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "9",
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "7",
              "8.1",
              "10",
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "2022"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1",
              "7.2"
            ]
          },
          {
            "operatingsystem": "Rocky",
            "operatingsystemrelease": [
              "8"
            ]
          },
          {
            "operatingsystem": "AlmaLinux",
            "operatingsystemrelease": [
              "8"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.3.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g806810b"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.3.0.tar.gz",
      "file_size": 187697,
      "file_md5": "3953773ed5219ebff13a78e1cb62dd62",
      "file_sha256": "758eaec442a0995ee0bdb40a10b5bea9eb3fbdc3f4378fd9fd32af1db81a4649",
      "downloads": 4706,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `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.\n\n```yaml\n---\nstdlib::manage::create_resources:\n  file:\n    /etc/somefile:\n      ensure: file\n      owner: root\n      group: root\n  package:\n    badpackage:\n      ensure: absent\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) (2022-07-11)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0)\n\n### Added\n\n- pdksync - \\(GH-cat-12\\) Add Support for Redhat 9 [\\#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan))\n- Convert `ensure_packages` to new API and refactor [\\#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher))\n\n### Fixed\n\n- \\(MODULES-2892\\) Handle missing file in file\\_line [\\#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug))\n- Simplify stdlib::manage [\\#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk))\n- Unbreak `rake strings:generate:reference` [\\#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex))\n- loadjson: do not send http\\_basic\\_authentication if not needed [\\#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen))\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) (2022-05-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [\\#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-4976\\) Add windows escaping functions [\\#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [\\#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - \\(FM-8922\\) - Add Support for Windows 2022 [\\#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-11196\\) Add support for AIX 7.2 [\\#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(IAC-1753\\) - Add Support for AlmaLinux 8 [\\#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [\\#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- \\(maint\\) Update str2saltedpbkdf2.rb to use the correct salt length [\\#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [\\#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - \\(IAC-1787\\) Remove Support for CentOS 6 [\\#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to\\_python\\(\\) [\\#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlibmanage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_packages`](#ensure_packages): Deprecated 3x version of the `ensure_packages` function\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::str2resource`](#stdlibstr2resource): This converts a string to a puppet resource.\n* [`stdlib::xml_encode`](#stdlibxml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address): Validate an IP address\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6): Validate an IPv6 address\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize): Validate the size of data\n* [`Stdlib::Email`](#stdlibemail): Validate an e-mail address\n* [`Stdlib::Ensure::File`](#stdlibensurefile): Validate the value of the ensure parameter for a file\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory): Validate the ensure parameter of a \"directory\" file resource\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile): Validate the ensure parameter of a \"file\" file resource\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink): Validate the ensure parameter of a \"link\" file resource\n* [`Stdlib::Ensure::Service`](#stdlibensureservice): Validate the value of the ensure parameter of a service resource\n* [`Stdlib::Filemode`](#stdlibfilemode): Validate a file mode\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn): Validate a Fully Qualified Domain Name\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl): Validate a HTTPS URL\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl): Validate a HTTP(S) URL\n* [`Stdlib::Host`](#stdlibhost): Validate a host (FQDN or IP address)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus): Validate a HTTP status code\n* [`Stdlib::IP::Address`](#stdlibipaddress): Validate an IP address\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet): Validate an IP address without subnet\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4): Validate an IPv4 address\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6): Validate an IPv6 address\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed): Validate a compressed IPv6 address\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full): Validate a full IPv6 address\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet): Validate an IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed): Validate compressed IPv6 address without subnet\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull): Validate full IPv6 address without subnet\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore): Validate an ObjectStore\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri): Validate a Google Cloud object store URI\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri): Validate an Amazon Web Services S3 object store URI\n* [`Stdlib::Port`](#stdlibport): Validate a port number\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic): Validate a dynamic port number\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral): Validate an ephemeral port number\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged): Validate a priviliged port number\n* [`Stdlib::Port::Registered`](#stdlibportregistered): Validate a registered port number\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged): Validate an unprivileged port number\n* [`Stdlib::Port::User`](#stdlibportuser): Validate a port number usable by a user\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility): Validate a syslog facility\n* [`Stdlib::Unixpath`](#stdlibunixpath): Validate a UNIX path\n* [`Stdlib::Windowspath`](#stdlibwindowspath): Validate a Windows path\n* [`Stdlib::Yes_no`](#stdlibyes_no): Validate a yes / no value\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlibmanage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is __limited__ support for `before`, `require`, `notify`,\nand `subscribe`.\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n          'subscribe' => ['Service[sshd]', 'Exec[something]'],\n        }\n      }\n    }\n```\n\n##### \n\n```puppet\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n      subscribe:\n        - 'Service[sshd]'\n        - 'Exec[something]'\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#create_resources)\n\n##### <a name=\"create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp`, are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 4.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages(Variant[String[1], Array[String[1]], Hash[String[1], Any]] $packages, Optional[Hash] $default_attributes)`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Undef` Returns nothing.\n\n##### `packages`\n\nData type: `Variant[String[1], Array[String[1]], Hash[String[1], Any]]`\n\nThe packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`\n\n##### `default_attributes`\n\nData type: `Optional[Hash]`\n\nDefault attributes to be passed to the `ensure_resource()` function\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nDeprecated 3x version of the `ensure_packages` function\n\n#### `ensure_packages()`\n\nThe ensure_packages function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Data`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nThis function is similar to a coalesce function in SQL.\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which hash algorithm to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type|Prefix|Note                 |\n|---------|------|---------------------|\n|MD5      |1     |                     |\n|SHA-256  |5     |                     |\n|SHA-512  |6     |Recommended          |\n|bcrypt   |2b    |                     |\n|bcrypt-a |2a    |bug compatible       |\n|bcrypt-x |2x    |bug compatible       |\n|bcrypt-y |2y    |historic alias for 2b|\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `String` Provides a crypt hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n#### `round()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n##### Examples\n\n###### Example usage\n\n```puppet\nround(2.9) #=> 3\nround(2.4) #=> 2\n```\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlibstr2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlibxml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n#### `to_json(Any $data)`\n\nConvert a data structure and output to JSON\n\nReturns: `String` Converted data to JSON\n\n##### Examples\n\n###### Output JSON to a file\n\n```puppet\nfile { '/tmp/my.json':\n  ensure  => file,\n  content => to_json($myhash),\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `String` The String representation of the object\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\nThe object to be converted\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n##### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nConvert a data structure and output it as YAML\n\nReturns: `String` The YAML document\n\n##### Examples\n\n###### Output YAML to a file\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash),\n}\n```\n\n###### Use options to control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation => 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\nVerifies that the certficate's signature was created from the\nsupplied key.\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nValidate the size of data\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nValidate the value of the ensure parameter for a file\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nValidate the ensure parameter of a \"directory\" file resource\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nValidate the ensure parameter of a \"file\" file resource\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nValidate the ensure parameter of a \"link\" file resource\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nValidate the value of the ensure parameter of a service resource\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nValidate a Fully Qualified Domain Name\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nValidate a HTTPS URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nValidate a HTTP(S) URL\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nValidate a host (FQDN or IP address)\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nValidate a HTTP status code\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nValidate an IP address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nValidate an IP address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nValidate an IPv4 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nValidate an IPv6 address\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nValidate a compressed IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nValidate a full IPv6 address\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nValidate an IPv6 address without subnet\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nValidate compressed IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nValidate full IPv6 address without subnet\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nValidate an ObjectStore\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nValidate a Google Cloud object store URI\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nValidate an Amazon Web Services S3 object store URI\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nValidate a port number\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nValidate a dynamic port number\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nValidate an ephemeral port number\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nValidate a priviliged port number\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nValidate a registered port number\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nValidate an unprivileged port number\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nValidate a port number usable by a user\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nValidate a syslog facility\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nValidate a Windows path\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nValidate a yes / no value\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "Mzk1Mzc3M2VkNTIxOWViZmYxM2E3OGUxY2I2MmRkNjI6MTY1NzU0OTk3Mw==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/758eaec442a0995ee0bdb40a10b5bea9eb3fbdc3f4378fd9fd32af1db81a4649",
            "self": "https://www.virustotal.com/api/v3/analyses/Mzk1Mzc3M2VkNTIxOWViZmYxM2E3OGUxY2I2MmRkNjI6MTY1NzU0OTk3Mw=="
          },
          "attributes": {
            "date": 1657549973,
            "stats": {
              "failure": 0,
              "timeout": 1,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 56,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20220711",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20220710",
                "engine_version": "6.311"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20220711",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20220711",
                "engine_version": "12.24.43275"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20220711",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20220711",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20220711",
                "engine_version": "8.3.3.14"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20220711",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20220711",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20220711",
                "engine_version": "7.0.56.4040"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20220711",
                "engine_version": "A:25.33480B:27.28037"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20220711",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20220711",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20220711",
                "engine_version": "6.0.0.35"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20220711",
                "engine_version": "9.5.234"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20220710",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20220711",
                "engine_version": "0.105.0.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20220711",
                "engine_version": "34794"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20220711",
                "engine_version": "6.0.24.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Lionic",
                "engine_update": "20220711",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20220711",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20220711",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20220711",
                "engine_version": "1.4.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20220711",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20220708",
                "engine_version": "2.0.0.4668"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20220426",
                "engine_version": "1.2.0.108"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20220711",
                "engine_version": "1.0.0.889"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20220711",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20220623",
                "engine_version": "4.0.40"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20220711",
                "engine_version": "35.24.1.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20220711",
                "engine_version": "2022-07-11.03"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20220711",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20220711",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20220711",
                "engine_version": "1.0.0.403"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20220711",
                "engine_version": "v0.1.4"
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20220711",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20220711",
                "engine_version": "2021.5.0.7597"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20220711",
                "engine_version": "18.10.978.51"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20220711",
                "engine_version": "6.2.142.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20220710",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20220711",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20220711",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20220711",
                "engine_version": "1.17.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20220707",
                "engine_version": "3.5.48.101"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20220711",
                "engine_version": "3.22.1.10283"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20220711",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20220711",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20220708",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20220711",
                "engine_version": "1.1.19300.2"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20220711",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20220711",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20220711",
                "engine_version": "25571"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20220711",
                "engine_version": "1.0.83.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20220711",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20220711",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220418",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20220711",
                "engine_version": "12.24.43275"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20220330",
                "engine_version": "22.2.1.2"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20220711",
                "engine_version": "220711-00"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20220711",
                "engine_version": "4.3.3.37"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20220711",
                "engine_version": "14.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20220711",
                "engine_version": "1.0.146.25618"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20220103",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20220705",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20220711",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20220709",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20220711",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20220711",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20220208",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "3953773ed5219ebff13a78e1cb62dd62",
            "sha1": "50d95fc3af18861265a69cdaeab0af41b87595ad",
            "size": 187697,
            "sha256": "758eaec442a0995ee0bdb40a10b5bea9eb3fbdc3f4378fd9fd32af1db81a4649"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2022-07-11 07:31:07 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.2.0",
      "slug": "puppetlabs-stdlib-8.2.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.2.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.2.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "9",
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "7",
              "8.1",
              "10",
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "2022"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1",
              "7.2"
            ]
          },
          {
            "operatingsystem": "Rocky",
            "operatingsystemrelease": [
              "8"
            ]
          },
          {
            "operatingsystem": "AlmaLinux",
            "operatingsystemrelease": [
              "8"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.3.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g806810b"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.2.0.tar.gz",
      "file_size": 184353,
      "file_md5": "da2610102612898e3cb3771a58ea6ec9",
      "file_sha256": "ec41256864400d200b16a33ff8b30424115e43472e73a8ddbb37f0c42e840271",
      "downloads": 41486,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\nThe `stdlib::manage` class provides an interface for generating trivial resource declarations via the `create_resources` parameter.\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) (2022-05-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0)\n\n### Added\n\n- Add `xml_encode` function [\\#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-4976\\) Add windows escaping functions [\\#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex))\n- MODULES-11309 : convert a string to a resource [\\#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk))\n- pdksync - \\(FM-8922\\) - Add Support for Windows 2022 [\\#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-11196\\) Add support for AIX 7.2 [\\#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan))\n- pdksync - \\(IAC-1753\\) - Add Support for AlmaLinux 8 [\\#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- 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))\n- Modernize escape functions [\\#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex))\n- 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))\n- \\(maint\\) Update str2saltedpbkdf2.rb to use the correct salt length [\\#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi))\n- Fix `to_yaml` `options` parameter [\\#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher))\n- 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))\n- pdksync - \\(IAC-1787\\) Remove Support for CentOS 6 [\\#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan))\n- Fix serialization of undef in to\\_python\\(\\) [\\#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex))\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::manage`](#stdlibmanage): A simple place to define trivial resources\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`batch_escape`](#batch_escape): Escapes a string so that it can be safely used in a batch shell command line.\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params)\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44)\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource)\n* [`ensure_resources`](#ensure_resources)\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string)\n* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam)\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`powershell_escape`](#powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.  To ensure compatibility ple\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#seeded_rand): seeded_rand.rb\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::str2resource`](#stdlibstr2resource): This converts a string to a puppet resource.\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n* [`stdlib::xml_encode`](#stdlibxml_encode): Encode strings for XML files\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): }\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): }\n* [`try_get_value`](#try_get_value)\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address lint:ignore:140chars\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages and stdlib::manage.\n\n### <a name=\"stdlibmanage\"></a>`stdlib::manage`\n\nSometimes your systems require a single simple resource.\nIt can feel unnecessary to create a module for a single\nresource.  There are a number of possible patterns to\ngenerate trivial resource definitions.  This is an attempt\nto create a single clear method for uncomplicated resources.\nThere is limited support for `before`, `require`, `notify`,\nand `subscribe`.  However, the target resources must be defined\nbefore this module is run.\n\nstdlib::manage::create_resources:\n  file:\n    '/etc/motd.d/hello':\n      content: I say Hi\n      notify: 'Service[sshd]'\n  package:\n    example:\n      ensure: installed\n\n#### Examples\n\n##### \n\n```puppet\nclass { 'stdlib::manage':\n    'create_resources' => {\n      'file' => {\n        '/etc/motd.d/hello' => {\n          'content' => 'I say Hi',\n          'notify' => 'Service[sshd]',\n        }\n      },\n      'package' => {\n        'example' => {\n          'ensure' => 'installed',\n        }\n      }\n    }\n```\n\n#### Parameters\n\nThe following parameters are available in the `stdlib::manage` class:\n\n* [`create_resources`](#create_resources)\n\n##### <a name=\"create_resources\"></a>`create_resources`\n\nData type: `Hash[String, Hash]`\n\nA hash of resources to create\nNOTE: functions, such as `template` or `epp` are not evaluated.\n\nDefault value: `{}`\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"batch_escape\"></a>`batch_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `batch_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a batch command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nThe defined_with_params function.\n\n#### `defined_with_params()`\n\nThe defined_with_params function.\n\nReturns: `Any`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nThe dig44 function.\n\n#### `dig44()`\n\nThe dig44 function.\n\nReturns: `Any`\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nThe ensure_resource function.\n\n#### `ensure_resource()`\n\nThe ensure_resource function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nThe ensure_resources function.\n\n#### `ensure_resources()`\n\nThe ensure_resources function.\n\nReturns: `Any`\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nThe fqdn_rand_string function.\n\n#### `fqdn_rand_string()`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nfqdn_rotate.rb\n\n#### `fqdn_rotate()`\n\nfqdn_rotate.rb\n\nReturns: `Any`\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nThe getparam function.\n\n#### `getparam()`\n\nThe getparam function.\n\nReturns: `Any`\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"powershell_escape\"></a>`powershell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\n#### `powershell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nReturns: `Any` An escaped string that can be safely used in a PowerShell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\n#### `pw_hash()`\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\nReturns: `Any`\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nseeded_rand.rb\n\n#### `seeded_rand()`\n\nseeded_rand.rb\n\nReturns: `Any`\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 4.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape(Any $string)`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` An escaped string that can be safely used in a Bourne shell command line.\n\n##### `string`\n\nData type: `Any`\n\nThe string to escape\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"stdlibstr2resource\"></a>`stdlib::str2resource`\n\nType: Ruby 4.x API\n\nThis converts a string to a puppet resource.\n\nThis attempts to convert a string like 'File[/foo]' into the\npuppet resource `File['/foo']` as detected by the catalog.\n\nThings like 'File[/foo, /bar]' are not supported as a\ntitle might contain things like ',' or ' '.  There is\nno clear value seperator to use.\n\nThis function can depend on the parse order of your\nmanifests/modules as it inspects the catalog thus far.\n\n#### Examples\n\n##### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n#### `stdlib::str2resource(String $res_string)`\n\nThe stdlib::str2resource function.\n\nReturns: `Any` Puppet::Resource\n\n##### Examples\n\n###### \n\n```puppet\nstdlib::str2resource('File[/foo]') => File[/foo]\n```\n\n##### `res_string`\n\nData type: `String`\n\nThe string to lookup as a resource\n\n### <a name=\"stdlibxml_encode\"></a>`stdlib::xml_encode`\n\nType: Ruby 4.x API\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\n#### Examples\n\n##### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`\n\nThis function can encode strings such that they can be used directly in XML files.\nIt supports encoding for both XML text (CharData) or attribute values (AttValue).\n\nReturns: `String` Returns the encoded CharData or AttValue string suitable for use in XML\n\n##### Examples\n\n###### Creating an XML file from a template\n\n```puppet\nfile { '/path/to/config.xml':\n  ensure  => file,\n  content => epp(\n    'mymodule/config.xml.epp',\n    {\n      password => $password.stdlib::xml_encode,\n    },\n  ),\n}\n```\n\n##### `str`\n\nData type: `String`\n\nThe string to encode\n\n##### `type`\n\nData type: `Optional[Enum['text','attr']]`\n\nWhether to encode for text or an attribute\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_json(Any $data)`\n\n}\n\nReturns: `String` Converted data to JSON\n\n##### `data`\n\nData type: `Any`\n\nData structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\n}\n\nReturns: `String` The YAML document\n\n##### `data`\n\nData type: `Any`\n\nThe data you want to convert to YAML\n\n##### `options`\n\nData type: `Optional[Hash]`\n\nA 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`.\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nThe try_get_value function.\n\n#### `try_get_value()`\n\nThe try_get_value function.\n\nReturns: `Any`\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "ZGEyNjEwMTAyNjEyODk4ZTNjYjM3NzFhNThlYTZlYzk6MTY1MjcxNTI2OA==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/ec41256864400d200b16a33ff8b30424115e43472e73a8ddbb37f0c42e840271",
            "self": "https://www.virustotal.com/api/v3/analyses/ZGEyNjEwMTAyNjEyODk4ZTNjYjM3NzFhNThlYTZlYzk6MTY1MjcxNTI2OA=="
          },
          "attributes": {
            "date": 1652715268,
            "stats": {
              "failure": 0,
              "timeout": 2,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 56,
              "type-unsupported": 15,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20211026",
                "engine_version": "2.10.2019.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20220516",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20220516",
                "engine_version": "6.292"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Bkav",
                "engine_update": "20220516",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20220516",
                "engine_version": "12.12.42373"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20220516",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20220516",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20220516",
                "engine_version": "8.3.3.14"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20220516",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20220516",
                "engine_version": "6.5.1.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20220516",
                "engine_version": "7.0.56.4040"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20220516",
                "engine_version": "A:25.33049B:27.27374"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20220516",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20220516",
                "engine_version": "5.0.0"
              },
              "VirIT": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VirIT",
                "engine_update": "20220516",
                "engine_version": "9.5.195"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20220515",
                "engine_version": "2.2.2.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20220516",
                "engine_version": "0.105.0.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20220516",
                "engine_version": "34626"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20220516",
                "engine_version": "6.0.24.0"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Lionic",
                "engine_update": "20220516",
                "engine_version": "7.5"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20220516",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20220516",
                "engine_version": "25.0.0.27"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20220516",
                "engine_version": "1.4.1.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20220428",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20220516",
                "engine_version": "2.0.0.4632"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Acronis",
                "engine_update": "20220426",
                "engine_version": "1.2.0.108"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20220516",
                "engine_version": "1.0.0.889"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20220516",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20220503",
                "engine_version": "4.0.36"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20220516",
                "engine_version": "35.24.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20220507",
                "engine_version": "2.14.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20220516",
                "engine_version": "2022-05-16.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20220516",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20220516",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20220516",
                "engine_version": "1.0.0.403"
              },
              "tehtris": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "tehtris",
                "engine_update": "20220516",
                "engine_version": "v0.1.2"
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20220516",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20220516",
                "engine_version": "2021.5.0.7597"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20220516",
                "engine_version": "18.10.978.51"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20220516",
                "engine_version": "6.2.142.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20220515",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20220516",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20220516",
                "engine_version": "0.9.0.1003"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20220516",
                "engine_version": "1.17.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20220419",
                "engine_version": "3.5.48.1"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20220516",
                "engine_version": "3.21.3.10230"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20220516",
                "engine_version": "3.0"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20220516",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20220515",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20220516",
                "engine_version": "1.1.19200.5"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20220516",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20220516",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20220516",
                "engine_version": "25276"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20220516",
                "engine_version": "1.0.78.174"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20220516",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20220516",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": "20220418",
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20220516",
                "engine_version": "12.12.42372"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20220330",
                "engine_version": "22.2.1.2"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20220516",
                "engine_version": "220516-04"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20220516",
                "engine_version": "4.2.2.27"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20220516",
                "engine_version": "14.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20220516",
                "engine_version": "1.0.146.25588"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20220103",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20220511",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20220516",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20220514",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20220516",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20220516",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20220208",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "da2610102612898e3cb3771a58ea6ec9",
            "sha1": "626ca5fdfd1053753416fbbf382c350f881e8bca",
            "size": 184353,
            "sha256": "ec41256864400d200b16a33ff8b30424115e43472e73a8ddbb37f0c42e840271"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2022-05-16 08:33:05 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.1.0",
      "slug": "puppetlabs-stdlib-8.1.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.1.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.1.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "9",
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          },
          {
            "operatingsystem": "Rocky",
            "operatingsystemrelease": [
              "8"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.2.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g51828b4"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.1.0.tar.gz",
      "file_size": 179699,
      "file_md5": "a60cd4ed77fa2cde9ceca56dc9a58d9e",
      "file_sha256": "0202e18f199e3f2e917bb17bb6f82664a1fc5236173ed61f84bd48aac4538774",
      "downloads": 1436220,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) (2021-10-04)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0)\n\n### Added\n\n- pdksync - \\(IAC-1751\\) - Add Support for Rocky 8 [\\#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan))\n- stdlib::ensure: Add support for package resource [\\#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro))\n- Added to\\_toml function [\\#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy))\n\n### Fixed\n\n- \\[MODULES-11195\\] Add lint-ignore for pattern length [\\#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel))\n- pdksync - \\(IAC-1598\\) - Remove Support for Debian 8 [\\#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan))\n- os\\_version\\_gte: fix version comparison logic [\\#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon))\n- max, lstrip: fix deprecated message [\\#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr))\n- \\(MODULES-11126\\) Replacing URI.escape with URI::DEFAULT\\_PARSER [\\#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle))\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params)\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44)\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource)\n* [`ensure_resources`](#ensure_resources)\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string)\n* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam)\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.  To ensure compatibility ple\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#seeded_rand): seeded_rand.rb\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): }\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_toml`](#to_toml): Convert a data structure and output to TOML.\n* [`to_yaml`](#to_yaml): }\n* [`try_get_value`](#try_get_value)\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address lint:ignore:140chars\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nThe defined_with_params function.\n\n#### `defined_with_params()`\n\nThe defined_with_params function.\n\nReturns: `Any`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nThe dig44 function.\n\n#### `dig44()`\n\nThe dig44 function.\n\nReturns: `Any`\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nThe ensure_resource function.\n\n#### `ensure_resource()`\n\nThe ensure_resource function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nThe ensure_resources function.\n\n#### `ensure_resources()`\n\nThe ensure_resources function.\n\nReturns: `Any`\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nThe fqdn_rand_string function.\n\n#### `fqdn_rand_string()`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nfqdn_rotate.rb\n\n#### `fqdn_rotate()`\n\nfqdn_rotate.rb\n\nReturns: `Any`\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nThe getparam function.\n\n#### `getparam()`\n\nThe getparam function.\n\nReturns: `Any`\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\n#### `pw_hash()`\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\nReturns: `Any`\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nseeded_rand.rb\n\n#### `seeded_rand()`\n\nseeded_rand.rb\n\nReturns: `Any`\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_json(Any $data)`\n\n}\n\nReturns: `Any` converted data to json\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_toml\"></a>`to_toml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to TOML.\n\n#### Examples\n\n##### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n#### `to_toml(Hash $data)`\n\nThe to_toml function.\n\nReturns: `String` Converted data as TOML string\n\n##### Examples\n\n###### How to output TOML to a file\n\n```puppet\nfile { '/tmp/config.toml':\n  ensure  => file,\n  content => to_toml($myhash),\n}\n```\n\n##### `data`\n\nData type: `Hash`\n\nData structure which needs to be converted into TOML\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\n}\n\nReturns: `String`\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nThe try_get_value function.\n\n#### `try_get_value()`\n\nThe try_get_value function.\n\nReturns: `Any`\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "YTYwY2Q0ZWQ3N2ZhMmNkZTljZWNhNTZkYzlhNThkOWU6MTYzMzMzODkzNw==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/0202e18f199e3f2e917bb17bb6f82664a1fc5236173ed61f84bd48aac4538774",
            "self": "https://www.virustotal.com/api/v3/analyses/YTYwY2Q0ZWQ3N2ZhMmNkZTljZWNhNTZkYzlhNThkOWU6MTYzMzMzODkzNw=="
          },
          "attributes": {
            "date": 1633338937,
            "stats": {
              "failure": 0,
              "timeout": 1,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 56,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20210816",
                "engine_version": "2.10.2019.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20211004",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20211001",
                "engine_version": "6.214"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20211002",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20211004",
                "engine_version": "11.217.38634"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20211004",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20211004",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20211004",
                "engine_version": "8.3.3.12"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20211004",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20211004",
                "engine_version": "6.3.0.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20211004",
                "engine_version": "7.0.49.9080"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20211004",
                "engine_version": "A:25.30959B:27.24689"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20211003",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20211001",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20211004",
                "engine_version": "95958"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20211003",
                "engine_version": "0.0.0.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20211003",
                "engine_version": "0.104.0.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20211004",
                "engine_version": "33956"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20211003",
                "engine_version": "0.1.5.2"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Lionic",
                "engine_update": "20211004",
                "engine_version": "4.2"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20211004",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20211004",
                "engine_version": "25.0.0.26"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20211004",
                "engine_version": "1.3.0.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20211004",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20211001",
                "engine_version": "2.0.0.4462"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Acronis",
                "engine_update": "20210512",
                "engine_version": "1.1.1.82"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20211004",
                "engine_version": "1.0.0.886"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20211004",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20210916",
                "engine_version": "4.0.28"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20211004",
                "engine_version": "32.44.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20210930",
                "engine_version": "2.9.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20211001",
                "engine_version": "2021-10-01.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20211004",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20211003",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20211004",
                "engine_version": "1.0.0.403"
              },
              "eGambit": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "eGambit",
                "engine_update": "20211004",
                "engine_version": null
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20211004",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20211004",
                "engine_version": "2021.5.0.7597"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20211004",
                "engine_version": "12.0.86.52"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20211004",
                "engine_version": "6.2.142.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20211003",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20211004",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20211004",
                "engine_version": "1.0"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20211003",
                "engine_version": "1.15.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20200727",
                "engine_version": "3.5.0.1023"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20211004",
                "engine_version": "3.21.1.10219"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20211004",
                "engine_version": "3.0.0.1"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20211004",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20210925",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20211004",
                "engine_version": "1.1.18500.10"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20211004",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20211004",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20211004",
                "engine_version": "24066"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20211004",
                "engine_version": "1.0.57.151"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20211004",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20211004",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": null,
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20211004",
                "engine_version": "11.217.38634"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20210829",
                "engine_version": "6.2.0.11"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20211003",
                "engine_version": "211003-04"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20211004",
                "engine_version": "4.2.2.27"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20211004",
                "engine_version": "14.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20211004",
                "engine_version": "1.0.146.25370"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20210610",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20210921",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20211004",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20211002",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20211004",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20211004",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20210126",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "a60cd4ed77fa2cde9ceca56dc9a58d9e",
            "sha1": "ab0ccfaa0c07aabec79180894cfda5b220a416eb",
            "size": 179699,
            "sha256": "0202e18f199e3f2e917bb17bb6f82664a1fc5236173ed61f84bd48aac4538774"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-10-04 02:14:45 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-8.0.0",
      "slug": "puppetlabs-stdlib-8.0.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "8.0.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "8.0.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "8",
              "9",
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.2.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g51828b4"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-8.0.0.tar.gz",
      "file_size": 177162,
      "file_md5": "e78348480c341aae54573015cf3a5b7c",
      "file_sha256": "c1292e991b7358ac10ba94c2e0abc87a9070a7137e038a5f2291c200a8322d50",
      "downloads": 854597,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) (2021-08-24)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0)\n\n### Changed\n\n- Flip installed and present in Function ensure\\_packages [\\#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc))\n\n### Added\n\n- New function to\\_python\\(\\) / to\\_ruby\\(\\) [\\#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex))\n- pdksync - \\(IAC-1709\\) - Add Support for Debian 11 [\\#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan))\n- Stdlib::Http::Method: Add new type for http methods [\\#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(MODULES-11099\\) Make merge parameter data types actually backwards compatible [\\#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe))\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params)\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44)\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource)\n* [`ensure_resources`](#ensure_resources)\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string)\n* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam)\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.  To ensure compatibility ple\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#seeded_rand): seeded_rand.rb\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): }\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_python`](#to_python): Convert an object into a String containing its Python representation\n* [`to_ruby`](#to_ruby): Convert an object into a String containing its Ruby representation\n* [`to_yaml`](#to_yaml): }\n* [`try_get_value`](#try_get_value)\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nThe defined_with_params function.\n\n#### `defined_with_params()`\n\nThe defined_with_params function.\n\nReturns: `Any`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nThe dig44 function.\n\n#### `dig44()`\n\nThe dig44 function.\n\nReturns: `Any`\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nThe ensure_resource function.\n\n#### `ensure_resource()`\n\nThe ensure_resource function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nThe ensure_resources function.\n\n#### `ensure_resources()`\n\nThe ensure_resources function.\n\nReturns: `Any`\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nThe fqdn_rand_string function.\n\n#### `fqdn_rand_string()`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nfqdn_rotate.rb\n\n#### `fqdn_rotate()`\n\nfqdn_rotate.rb\n\nReturns: `Any`\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nThe getparam function.\n\n#### `getparam()`\n\nThe getparam function.\n\nReturns: `Any`\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash[Scalar,Any]` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\n#### `pw_hash()`\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\nReturns: `Any`\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nseeded_rand.rb\n\n#### `seeded_rand()`\n\nseeded_rand.rb\n\nReturns: `Any`\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_json(Any $data)`\n\n}\n\nReturns: `Any` converted data to json\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_python\"></a>`to_python`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Python representation\n\n#### Examples\n\n##### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n#### `to_python(Any $object)`\n\nThe to_python function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Python\n\n```puppet\n# output Python to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.py':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_python %>\n    PORT = <%= $mailserver.to_python %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_ruby\"></a>`to_ruby`\n\nType: Ruby 4.x API\n\nConvert an object into a String containing its Ruby representation\n\n#### Examples\n\n##### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n#### `to_ruby(Any $object)`\n\nThe to_ruby function.\n\nReturns: `Any`\n\n##### Examples\n\n###### how to output Ruby\n\n```puppet\n# output Ruby to a file\n$listen = '0.0.0.0'\n$port = 8000\nfile { '/opt/acme/etc/settings.rb':\n  content => inline_epp(@(\"SETTINGS\")),\n    LISTEN = <%= $listen.to_ruby %>\n    PORT = <%= $mailserver.to_ruby %>\n    | SETTINGS\n}\n```\n\n##### `object`\n\nData type: `Any`\n\n\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\n}\n\nReturns: `String`\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nThe try_get_value function.\n\n#### `try_get_value()`\n\nThe try_get_value function.\n\nReturns: `Any`\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": {
        "data": {
          "id": "ZTc4MzQ4NDgwYzM0MWFhZTU0NTczMDE1Y2YzYTViN2M6MTYzMjk1NjYyOQ==",
          "type": "analysis",
          "links": {
            "item": "https://www.virustotal.com/api/v3/files/c1292e991b7358ac10ba94c2e0abc87a9070a7137e038a5f2291c200a8322d50",
            "self": "https://www.virustotal.com/api/v3/analyses/ZTc4MzQ4NDgwYzM0MWFhZTU0NTczMDE1Y2YzYTViN2M6MTYzMjk1NjYyOQ=="
          },
          "attributes": {
            "date": 1632956629,
            "stats": {
              "failure": 0,
              "timeout": 1,
              "harmless": 0,
              "malicious": 0,
              "suspicious": 0,
              "undetected": 56,
              "type-unsupported": 16,
              "confirmed-timeout": 0
            },
            "status": "completed",
            "results": {
              "CMC": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CMC",
                "engine_update": "20210816",
                "engine_version": "2.10.2019.1"
              },
              "MAX": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MAX",
                "engine_update": "20210929",
                "engine_version": "2019.9.16.1"
              },
              "APEX": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "APEX",
                "engine_update": "20210928",
                "engine_version": "6.213"
              },
              "Bkav": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Bkav",
                "engine_update": "20210929",
                "engine_version": "1.3.0.9899"
              },
              "K7GW": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7GW",
                "engine_update": "20210929",
                "engine_version": "11.217.38555"
              },
              "ALYac": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ALYac",
                "engine_update": "20210929",
                "engine_version": "1.1.3.1"
              },
              "Avast": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avast",
                "engine_update": "20210929",
                "engine_version": "21.1.5827.0"
              },
              "Avira": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Avira",
                "engine_update": "20210929",
                "engine_version": "8.3.3.12"
              },
              "Baidu": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Baidu",
                "engine_update": "20190318",
                "engine_version": "1.0.0.2"
              },
              "Cynet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cynet",
                "engine_update": "20210929",
                "engine_version": "4.0.0.27"
              },
              "Cyren": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Cyren",
                "engine_update": "20210929",
                "engine_version": "6.3.0.2"
              },
              "DrWeb": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "DrWeb",
                "engine_update": "20210929",
                "engine_version": "7.0.49.9080"
              },
              "GData": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "GData",
                "engine_update": "20210929",
                "engine_version": "A:25.30920B:27.24635"
              },
              "Panda": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Panda",
                "engine_update": "20210929",
                "engine_version": "4.6.4.2"
              },
              "VBA32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VBA32",
                "engine_update": "20210929",
                "engine_version": "5.0.0"
              },
              "VIPRE": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "VIPRE",
                "engine_update": "20210929",
                "engine_version": "95850"
              },
              "Zoner": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zoner",
                "engine_update": "20210928",
                "engine_version": "0.0.0.0"
              },
              "ClamAV": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ClamAV",
                "engine_update": "20210929",
                "engine_version": "0.104.0.0"
              },
              "Comodo": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Comodo",
                "engine_update": "20210929",
                "engine_version": "33942"
              },
              "Ikarus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ikarus",
                "engine_update": "20210929",
                "engine_version": "0.1.5.2"
              },
              "Lionic": {
                "method": "blacklist",
                "result": null,
                "category": "timeout",
                "engine_name": "Lionic",
                "engine_update": "20210929",
                "engine_version": "4.2"
              },
              "McAfee": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee",
                "engine_update": "20210929",
                "engine_version": "6.0.6.653"
              },
              "Rising": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Rising",
                "engine_update": "20210929",
                "engine_version": "25.0.0.26"
              },
              "Sophos": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sophos",
                "engine_update": "20210929",
                "engine_version": "1.3.0.0"
              },
              "Yandex": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Yandex",
                "engine_update": "20210929",
                "engine_version": "5.5.2.24"
              },
              "Zillya": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Zillya",
                "engine_update": "20210929",
                "engine_version": "2.0.0.4458"
              },
              "Acronis": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Acronis",
                "engine_update": "20210512",
                "engine_version": "1.1.1.82"
              },
              "Alibaba": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Alibaba",
                "engine_update": "20190527",
                "engine_version": "0.3.0.5"
              },
              "Arcabit": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Arcabit",
                "engine_update": "20210929",
                "engine_version": "1.0.0.886"
              },
              "Cylance": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cylance",
                "engine_update": "20210929",
                "engine_version": "2.3.1.101"
              },
              "Elastic": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Elastic",
                "engine_update": "20210916",
                "engine_version": "4.0.28"
              },
              "FireEye": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "FireEye",
                "engine_update": "20210929",
                "engine_version": "32.44.1.0"
              },
              "Sangfor": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Sangfor",
                "engine_update": "20210831",
                "engine_version": "2.9.0.0"
              },
              "TACHYON": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TACHYON",
                "engine_update": "20210929",
                "engine_version": "2021-09-29.02"
              },
              "Tencent": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Tencent",
                "engine_update": "20210929",
                "engine_version": "1.0.0.1"
              },
              "ViRobot": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ViRobot",
                "engine_update": "20210929",
                "engine_version": "2014.3.20.0"
              },
              "Webroot": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Webroot",
                "engine_update": "20210929",
                "engine_version": "1.0.0.403"
              },
              "eGambit": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "eGambit",
                "engine_update": "20210929",
                "engine_version": null
              },
              "Ad-Aware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Ad-Aware",
                "engine_update": "20210929",
                "engine_version": "3.0.21.193"
              },
              "Emsisoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Emsisoft",
                "engine_update": "20210929",
                "engine_version": "2021.5.0.7597"
              },
              "F-Secure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "F-Secure",
                "engine_update": "20210929",
                "engine_version": "12.0.86.52"
              },
              "Fortinet": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Fortinet",
                "engine_update": "20210929",
                "engine_version": "6.2.142.0"
              },
              "Jiangmin": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Jiangmin",
                "engine_update": "20210928",
                "engine_version": "16.0.100"
              },
              "Kingsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kingsoft",
                "engine_update": "20210929",
                "engine_version": "2017.9.26.565"
              },
              "Paloalto": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Paloalto",
                "engine_update": "20210929",
                "engine_version": "1.0"
              },
              "Symantec": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Symantec",
                "engine_update": "20210929",
                "engine_version": "1.15.0.0"
              },
              "Trapmine": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trapmine",
                "engine_update": "20200727",
                "engine_version": "3.5.0.1023"
              },
              "AhnLab-V3": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "AhnLab-V3",
                "engine_update": "20210929",
                "engine_version": "3.21.1.10219"
              },
              "Antiy-AVL": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Antiy-AVL",
                "engine_update": "20210929",
                "engine_version": "3.0.0.1"
              },
              "Kaspersky": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Kaspersky",
                "engine_update": "20210929",
                "engine_version": "21.0.1.45"
              },
              "MaxSecure": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MaxSecure",
                "engine_update": "20210925",
                "engine_version": "1.0.0.1"
              },
              "Microsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Microsoft",
                "engine_update": "20210929",
                "engine_version": "1.1.18500.10"
              },
              "Trustlook": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Trustlook",
                "engine_update": "20210929",
                "engine_version": "1.0"
              },
              "ZoneAlarm": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ZoneAlarm",
                "engine_update": "20210929",
                "engine_version": "1.0"
              },
              "Cybereason": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Cybereason",
                "engine_update": "20210330",
                "engine_version": "1.2.449"
              },
              "ESET-NOD32": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "ESET-NOD32",
                "engine_update": "20210929",
                "engine_version": "24044"
              },
              "Gridinsoft": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Gridinsoft",
                "engine_update": "20210929",
                "engine_version": "1.0.56.149"
              },
              "TrendMicro": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro",
                "engine_update": "20210929",
                "engine_version": "11.0.0.1006"
              },
              "BitDefender": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefender",
                "engine_update": "20210929",
                "engine_version": "7.2"
              },
              "CrowdStrike": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "CrowdStrike",
                "engine_update": null,
                "engine_version": "1.0"
              },
              "K7AntiVirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "K7AntiVirus",
                "engine_update": "20210929",
                "engine_version": "11.217.38554"
              },
              "SentinelOne": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SentinelOne",
                "engine_update": "20210829",
                "engine_version": "6.2.0.11"
              },
              "Avast-Mobile": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "Avast-Mobile",
                "engine_update": "20210929",
                "engine_version": "210929-00"
              },
              "Malwarebytes": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "Malwarebytes",
                "engine_update": "20210929",
                "engine_version": "4.2.2.27"
              },
              "CAT-QuickHeal": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "CAT-QuickHeal",
                "engine_update": "20210929",
                "engine_version": "14.00"
              },
              "NANO-Antivirus": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "NANO-Antivirus",
                "engine_update": "20210929",
                "engine_version": "1.0.146.25370"
              },
              "BitDefenderFalx": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "BitDefenderFalx",
                "engine_update": "20210610",
                "engine_version": "2.0.936"
              },
              "BitDefenderTheta": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "BitDefenderTheta",
                "engine_update": "20210921",
                "engine_version": "7.2.37796.0"
              },
              "MicroWorld-eScan": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "MicroWorld-eScan",
                "engine_update": "20210929",
                "engine_version": "14.0.409.0"
              },
              "SUPERAntiSpyware": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "SUPERAntiSpyware",
                "engine_update": "20210925",
                "engine_version": "5.6.0.1032"
              },
              "McAfee-GW-Edition": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "McAfee-GW-Edition",
                "engine_update": "20210929",
                "engine_version": "v2019.1.2+3728"
              },
              "TrendMicro-HouseCall": {
                "method": "blacklist",
                "result": null,
                "category": "undetected",
                "engine_name": "TrendMicro-HouseCall",
                "engine_update": "20210929",
                "engine_version": "10.0.0.1040"
              },
              "SymantecMobileInsight": {
                "method": "blacklist",
                "result": null,
                "category": "type-unsupported",
                "engine_name": "SymantecMobileInsight",
                "engine_update": "20210126",
                "engine_version": "2.0"
              }
            }
          }
        },
        "meta": {
          "file_info": {
            "md5": "e78348480c341aae54573015cf3a5b7c",
            "sha1": "44f3e25734569b2e60aeced9b6fa989c84d24a2b",
            "size": 177162,
            "sha256": "c1292e991b7358ac10ba94c2e0abc87a9070a7137e038a5f2291c200a8322d50"
          }
        }
      },
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-08-24 07:45:11 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-7.1.0",
      "slug": "puppetlabs-stdlib-7.1.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "7.1.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "7.1.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "8",
              "9",
              "10"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "2.0.0",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-ge04486b"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 80,
      "file_uri": "/v3/files/puppetlabs-stdlib-7.1.0.tar.gz",
      "file_size": 179471,
      "file_md5": "5755dd54827a9f675f3171f199d8c28d",
      "file_sha256": "2e6f85c77dfd3b8ffd2dbfc51b48586c0701cba3e19c4ff3756e1c50934c10e5",
      "downloads": 680917,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-15)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0)\n\n### Added\n\n- pw\\_hash: add support for bcrypt variants [\\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params)\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44)\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource)\n* [`ensure_resources`](#ensure_resources)\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string)\n* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam)\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.  To ensure compatibility ple\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#seeded_rand): seeded_rand.rb\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): }\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_yaml`](#to_yaml): }\n* [`try_get_value`](#try_get_value)\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\n> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nThe defined_with_params function.\n\n#### `defined_with_params()`\n\nThe defined_with_params function.\n\nReturns: `Any`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nThe dig44 function.\n\n#### `dig44()`\n\nThe dig44 function.\n\nReturns: `Any`\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nThe ensure_resource function.\n\n#### `ensure_resource()`\n\nThe ensure_resource function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nThe ensure_resources function.\n\n#### `ensure_resources()`\n\nThe ensure_resources function.\n\nReturns: `Any`\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nThe fqdn_rand_string function.\n\n#### `fqdn_rand_string()`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nfqdn_rotate.rb\n\n#### `fqdn_rotate()`\n\nfqdn_rotate.rb\n\nReturns: `Any`\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nThe getparam function.\n\n#### `getparam()`\n\nThe getparam function.\n\nReturns: `Any`\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash, Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash, Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\n#### `pw_hash()`\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\nReturns: `Any`\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nseeded_rand.rb\n\n#### `seeded_rand()`\n\nseeded_rand.rb\n\nReturns: `Any`\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_json(Any $data)`\n\n}\n\nReturns: `Any` converted data to json\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\n}\n\nReturns: `String`\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nThe try_get_value function.\n\n#### `try_get_value()`\n\nThe try_get_value function.\n\nReturns: `Any`\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": null,
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-05-17 04:59:50 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-7.0.1",
      "slug": "puppetlabs-stdlib-7.0.1",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "7.0.1",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "7.0.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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "8",
              "9",
              "10"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "1.18.1",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g12a5dea"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 92,
      "file_uri": "/v3/files/puppetlabs-stdlib-7.0.1.tar.gz",
      "file_size": 178986,
      "file_md5": "5ef94cfb9bccf162d14f49a6f28aa5a8",
      "file_sha256": "5b93549def31a2225419b19ebc2c3e7ad425f7ffd4cd81863be70f6fc256a74b",
      "downloads": 207501,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-03)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)\n\n### Fixed\n\n- Fix typo in validate\\_ipv6\\_address function [\\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params)\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44)\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource)\n* [`ensure_resources`](#ensure_resources)\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string)\n* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam)\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.  To ensure compatibility ple\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#seeded_rand): seeded_rand.rb\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): }\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_yaml`](#to_yaml): }\n* [`try_get_value`](#try_get_value)\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nThe defined_with_params function.\n\n#### `defined_with_params()`\n\nThe defined_with_params function.\n\nReturns: `Any`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nThe dig44 function.\n\n#### `dig44()`\n\nThe dig44 function.\n\nReturns: `Any`\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nThe ensure_resource function.\n\n#### `ensure_resource()`\n\nThe ensure_resource function.\n\nReturns: `Any`\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nThe ensure_resources function.\n\n#### `ensure_resources()`\n\nThe ensure_resources function.\n\nReturns: `Any`\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nThe fqdn_rand_string function.\n\n#### `fqdn_rand_string()`\n\nThe fqdn_rand_string function.\n\nReturns: `Any`\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nfqdn_rotate.rb\n\n#### `fqdn_rotate()`\n\nfqdn_rotate.rb\n\nReturns: `Any`\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nThe getparam function.\n\n#### `getparam()`\n\nThe getparam function.\n\nReturns: `Any`\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash, Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash, Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\n#### `pw_hash()`\n\nPlease note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.\n To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.\n\nReturns: `Any`\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nseeded_rand.rb\n\n#### `seeded_rand()`\n\nseeded_rand.rb\n\nReturns: `Any`\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_json(Any $data)`\n\n}\n\nReturns: `Any` converted data to json\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\n}\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\n}\n\nReturns: `String`\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nThe try_get_value function.\n\n#### `try_get_value()`\n\nThe try_get_value function.\n\nReturns: `Any`\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibemail\"></a>`Stdlib::Email`\n\nhttps://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": null,
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-04-12 02:17:13 -0700",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-7.0.0",
      "slug": "puppetlabs-stdlib-7.0.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "7.0.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "7.0.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "8",
              "9",
              "10"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 6.0.0 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "1.18.1",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g44cc7ed"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 92,
      "file_uri": "/v3/files/puppetlabs-stdlib-7.0.0.tar.gz",
      "file_size": 181552,
      "file_md5": "8e54c2e14a55dabc0395f8084c945a4f",
      "file_sha256": "2935a6f31029097a19346b13689393fb46a75938726b3296630c2a4b284c1342",
      "downloads": 260562,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)\n\n### Changed\n\n- 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))\n\n### Added\n\n- Stdlib::Email type [\\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))\n\n### Fixed\n\n- \\(bugfix\\) Setting stricter email validation [\\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))\n- \\(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))\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash, Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash, Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which type of hash to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type            |Specifier|\n|---------------------|---------|\n|MD5                  |1        |\n|SHA-256              |5        |\n|SHA-512 (recommended)|6        |\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which type of hash to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type            |Specifier|\n|---------------------|---------|\n|MD5                  |1        |\n|SHA-256              |5        |\n|SHA-512 (recommended)|6        |\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `Hash` Provides a hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### how to output JSON\n\n```puppet\n# output json to a file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json($myhash),\n  }\n```\n\n#### `to_json(Any $data)`\n\nThe to_json function.\n\nReturns: `Any` converted data to json\n\n##### Examples\n\n###### how to output JSON\n\n```puppet\n# output json to a file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json($myhash),\n  }\n```\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### How to output YAML\n\n```puppet\n# output yaml to a file\n  file { '/tmp/my.yaml':\n    ensure  => file,\n    content => to_yaml($myhash),\n  }\n```\n\n##### Use options control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation: 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nThe to_yaml function.\n\nReturns: `String`\n\n##### Examples\n\n###### How to output YAML\n\n```puppet\n# output yaml to a file\n  file { '/tmp/my.yaml':\n    ensure  => file,\n    content => to_yaml($myhash),\n  }\n```\n\n###### Use options control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation: 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": null,
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-03-01 05:51:59 -0800",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    },
    {
      "uri": "/v3/releases/puppetlabs-stdlib-6.6.0",
      "slug": "puppetlabs-stdlib-6.6.0",
      "module": {
        "uri": "/v3/modules/puppetlabs-stdlib",
        "slug": "puppetlabs-stdlib",
        "name": "stdlib",
        "deprecated_at": null,
        "owner": {
          "uri": "/v3/users/puppetlabs",
          "slug": "puppetlabs",
          "username": "puppetlabs",
          "gravatar_id": "fdd009b7c1ec96e088b389f773e87aec"
        }
      },
      "version": "6.6.0",
      "metadata": {
        "name": "puppetlabs-stdlib",
        "version": "6.6.0",
        "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://tickets.puppetlabs.com/browse/MODULES",
        "dependencies": [

        ],
        "operatingsystem_support": [
          {
            "operatingsystem": "RedHat",
            "operatingsystemrelease": [
              "5",
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "CentOS",
            "operatingsystemrelease": [
              "5",
              "6",
              "7",
              "8"
            ]
          },
          {
            "operatingsystem": "OracleLinux",
            "operatingsystemrelease": [
              "5",
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "Scientific",
            "operatingsystemrelease": [
              "6",
              "7"
            ]
          },
          {
            "operatingsystem": "SLES",
            "operatingsystemrelease": [
              "11",
              "12",
              "15"
            ]
          },
          {
            "operatingsystem": "Debian",
            "operatingsystemrelease": [
              "8",
              "9",
              "10"
            ]
          },
          {
            "operatingsystem": "Ubuntu",
            "operatingsystemrelease": [
              "14.04",
              "16.04",
              "18.04",
              "20.04"
            ]
          },
          {
            "operatingsystem": "Solaris",
            "operatingsystemrelease": [
              "10",
              "11"
            ]
          },
          {
            "operatingsystem": "Windows",
            "operatingsystemrelease": [
              "2008",
              "2008 R2",
              "2012",
              "2012 R2",
              "2016",
              "2019",
              "7",
              "8.1",
              "10"
            ]
          },
          {
            "operatingsystem": "AIX",
            "operatingsystemrelease": [
              "5.3",
              "6.1",
              "7.1"
            ]
          }
        ],
        "requirements": [
          {
            "name": "puppet",
            "version_requirement": ">= 5.5.10 < 8.0.0"
          }
        ],
        "description": "Standard Library for Puppet Modules",
        "pdk-version": "1.18.1",
        "template-url": "https://github.com/puppetlabs/pdk-templates#main",
        "template-ref": "heads/main-0-g5afcd3d"
      },
      "tags": [
        "puppetlabs",
        "library",
        "stdlib",
        "standard",
        "stages"
      ],
      "supported": false,
      "pdk": true,
      "validation_score": 100,
      "file_uri": "/v3/files/puppetlabs-stdlib-6.6.0.tar.gz",
      "file_size": 183824,
      "file_md5": "2ee548f33a3baf0dac389fa18e5b2878",
      "file_sha256": "5e39f12241ddc909ebd8ed5989d6f9ab1053a8a9bd1704cdfd38ddd075e813c5",
      "downloads": 612558,
      "readme": "# stdlib\n\n#### Table of Contents\n\n1. [Overview](#overview)\n1. [Module Description](#module-description)\n1. [Setup](#setup)\n1. [Usage](#usage)\n1. [Reference](#reference)\n    1. [Data Types](#data-types)\n    1. [Facts](#facts)\n1. [Limitations](#limitations)\n1. [Development](#development)\n1. [Contributors](#contributors)\n\n## Overview\n\nThis module provides a standard library of resources for Puppet modules.\n\n## Module Description\n\nPuppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:\n\n * Stages\n * Facts\n * Functions\n * Defined types\n * Data types\n * Providers\n\n> *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.\n\n## Setup\n\n[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.\n\nIf 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.\n\n## Usage\n\nMost 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`.\n\nWhen declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.\n\nThe `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):\n\n  * setup\n  * main\n  * runtime\n  * setup_infra\n  * deploy_infra\n  * setup_app\n  * deploy_app\n  * deploy\n\nSample usage:\n\n```puppet\nnode default {\n  include stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Reference\n\nFor information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md).\n\n<a id=\"data-types\"></a>\n### Data types\n\n#### `Stdlib::Absolutepath`\n\nA strict absolute path type. Uses a variant of Unixpath and Windowspath types.\n\nAcceptable input examples:\n\n```shell\n/var/log\n```\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:.\n```\n\n```shell\nC:\\\\WINDOWS\\\\System32\n```\n\nUnacceptable input example:\n\n```shell\n../relative_path\n```\n\n#### `Stdlib::Ensure::Service`\n\nMatches acceptable ensure values for service resources.\n\nAcceptable input examples:\n\n```shell\nstopped\nrunning\n```\n\nUnacceptable input example:\n\n```shell\ntrue\nfalse\n```\n\n#### `Stdlib::HTTPSUrl`\n\nMatches HTTPS URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nHTTPS://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org`\n```\n\n#### `Stdlib::HTTPUrl`\n\nMatches both HTTPS and HTTP URLs. It is a case insensitive match.\n\nAcceptable input example:\n\n```shell\nhttps://hello.com\n\nhttp://hello.com\n\nHTTP://HELLO.COM\n```\n\nUnacceptable input example:\n\n```shell\nhttds://notquiteright.org\n```\n\n#### `Stdlib::MAC`\n\nMatches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342).\n\n#### `Stdlib::Unixpath`\n\nMatches absolute paths on Unix operating systems.\n\nAcceptable input example:\n\n```shell\n/usr2/username/bin:/usr/local/bin:/usr/bin:\n\n/var/tmp\n```\n\nUnacceptable input example:\n\n```shell\nC:/whatever\n\nsome/path\n\n../some/other/path\n```\n\n#### `Stdlib::Filemode`\n\nMatches octal file modes consisting of one to four numbers and symbolic file modes.\n\nAcceptable input examples:\n\n```shell\n0644\n```\n\n```shell\n1777\n```\n\n```shell\na=Xr,g=w\n```\n\nUnacceptable input examples:\n\n```shell\nx=r,a=wx\n```\n\n```shell\n0999\n```\n\n#### `Stdlib::Windowspath`\n\nMatches paths on Windows operating systems.\n\nAcceptable input example:\n\n```shell\nC:\\\\WINDOWS\\\\System32\n\nC:\\\\\n\n\\\\\\\\host\\\\windows\n```\n\nValid values: A windows filepath.\n\n#### `Stdlib::Filesource`\n\nMatches paths valid values for the source parameter of the Puppet file type.\n\nAcceptable input example:\n\n```shell\nhttp://example.com\n\nhttps://example.com\n\nfile:///hello/bla\n```\n\nValid values: A filepath.\n\n#### `Stdlib::Fqdn`\n\nMatches paths on fully qualified domain name.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nexample.com\n\nwww.example.com\n```\nValid values: Domain name of a server.\n\n#### `Stdlib::Host`\n\nMatches a valid host which could be a valid ipv4, ipv6 or fqdn.\n\nAcceptable input example:\n\n```shell\nlocalhost\n\nwww.example.com\n\n192.0.2.1\n```\n\nValid values: An IP address or domain name.\n\n#### `Stdlib::Port`\n\nMatches a valid TCP/UDP Port number.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n65000\n```\n\nValid values: An Integer.\n\n#### `Stdlib::Port::Privileged`\n\nMatches a valid TCP/UDP Privileged port i.e. < 1024.\n\nAcceptable input examples:\n\n```shell\n80\n\n443\n\n1023\n```\n\nValid values: A number less than 1024.\n\n#### `Stdlib::Port::Unprivileged`\n\nMatches a valid TCP/UDP Privileged port i.e. >= 1024.\n\nAcceptable input examples:\n\n```shell\n1024\n\n1337\n\n65000\n\n```\n\nValid values: A number more than or equal to 1024.\n\n#### `Stdlib::Base32`\n\nMatches paths a valid base32 string.\n\nAcceptable input example:\n\n```shell\nASDASDDASD3453453\n\nasdasddasd3453453=\n\nASDASDDASD3453453==\n```\n\nValid values: A base32 string.\n\n#### `Stdlib::Base64`\n\nMatches paths a valid base64 string.\n\nAcceptable input example:\n\n```shell\nasdasdASDSADA342386832/746+=\n\nasdasdASDSADA34238683274/6+\n\nasdasdASDSADA3423868327/46+==\n```\n\nValid values: A base64 string.\n\n#### `Stdlib::Ipv4`\n\nThis type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4).\n\n#### `Stdlib::Ipv6`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6).\n\n#### `Stdlib::Ip_address`\n\nThis type is no longer available. To make use of this functionality, use  [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress)\n\n#### `Stdlib::IP::Address`\n\nMatches 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address                            # true\n'52.10.10.141' =~ Stdlib::IP::Address                             # true\n'192.168.1' =~ Stdlib::IP::Address                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address                     # true\n```\n\n#### `Stdlib::IP::Address::V4`\n\nMatch 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.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V4                                # true\n'10.1.240.4/24' =~ Stdlib::IP::Address::V4                            # true\n'192.168.1' =~ Stdlib::IP::Address::V4                                # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4  # false\n'12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4                   # false\n```\n\nValid values: An IPv4 address.\n\n#### `Stdlib::IP::Address::V6`\n\nMatch any string consistenting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix.\n\nExamples:\n\n```\n'127.0.0.1' =~ Stdlib::IP::Address::V6                                # false\n'10.1.240.4/24' =~ Stdlib::IP::Address::V6                            # false\n'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6  # true\n'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6                     # true\n'FF01::101' =~ Stdlib::IP::Address::V6                                # true\n```\n\nValid values: An IPv6 address.\n\n#### `Stdlib::IP::Address::Nosubnet`\n\nMatch 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').\n\nValid values: An IP address with no subnet.\n\n#### `Stdlib::IP::Address::V4::CIDR`\n\nMatch 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'\nbut not '192.168.0.6').\n\nValid 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'.\n\n#### `Stdlib::IP::Address::V4::Nosubnet`\n\nMatch 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').\n\nValid values: An IPv4 address with no subnet.\n\n#### `Stdlib::IP::Address::V6::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet`\n\nAlias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`.\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Full`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Alternate`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nMatch 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).\n\n#### `Stdlib::IP::Address::V6::CIDR`\n\nMatch 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',\nbut not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').\n\n#### `Stdlib::ObjectStore`\n\nMatches cloud object store uris.\n\nAcceptable input example:\n\n```shell\ns3://mybucket/path/to/file\n\ngs://bucket/file\n\n```\nValid values: cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::GSUri`\n\nMatches Google Cloud object store uris.\n\nAcceptable input example:\n\n```shell\n\ngs://bucket/file\n\ngs://bucket/path/to/file\n\n```\nValid values: Google Cloud object store uris.\n\n\n#### `Stdlib::ObjectStore::S3Uri`\n\nMatches Amazon Web Services S3 object store uris.\n\nAcceptable input example:\n\n```shell\ns3://bucket/file\n\ns3://bucket/path/to/file\n\n```\nValid values: Amazon Web Services S3 object store uris.\n\n#### `Stdlib::Syslogfacility`\n\nAn 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.\n\n<a id=\"facts\"></a>\n### Facts\n\n#### `package_provider`\n\nReturns the default provider Puppet uses to manage packages on this system.\n\n#### `is_pe`\n\nReturns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_version`\n\nReturns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_major_version`\n\nReturns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_minor_version`\n\nReturns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.\n\n#### `pe_patch_version`\n\nReturns the patch version of Puppet Enterprise that is installed.\n\n#### `puppet_vardir`\n\nReturns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.\n\n#### `puppet_environmentpath`\n\nReturns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.\n\n#### `puppet_server`\n\nReturns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate.\n\n#### `root_home`\n\nDetermines the root home directory.\n\nDetermines the root home directory, which depends on your operating system. Generally this is '/root'.\n\n#### `service_provider`\n\nReturns the default provider Puppet uses to manage services on this system\n\n## Limitations\n\nAs 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.\n\nFor an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)\n\n## Development\n\nPuppet 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).\n\nTo report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).\n\n## Contributors\n\nThe list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).\n",
      "changelog": "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).\n\n## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-01)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)\n\n### Added\n\n- stdlib::ensure: new fuction to cast ensure values [\\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))\n- \\(feat\\) Add support for Puppet 7 [\\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))\n- Allow options injection for to\\_yaml [\\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))\n- Allow start/end checks on empty strings [\\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))\n- 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))\n\n### Fixed\n\n- \\(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))\n- 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))\n\n## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)\n\n### Added\n\n- Add parsehocon\\(\\) function [\\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))\n- Add new types for Stdlib::Ensure::File [\\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))\n- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))\n- 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))\n\n## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)\n\n### Added\n\n- 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))\n- \\(IAC-746\\) - Add ubuntu 20.04 support [\\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))\n\n### Fixed\n\n- \\[MODULES-10781\\] Fix defined type defined\\_with\\_params\\(\\) [\\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))\n- \\[MODULES-10729\\] defined\\_with\\_params - unnamed type [\\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)\n\n### Added\n\n- Add start\\_with function [\\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))\n- stdlib::end\\_with: create String.end\\_with function [\\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))\n- Adding str2saltedpbkdf2 function [\\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))\n\n### Fixed\n\n- \\(MODULES-10623\\) explicitly top-scope calls to JSON methods [\\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))\n- \\[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))\n- Add correct namespace for start\\_with function [\\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))\n- intersection: show types in exception due to invalid arguments [\\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))\n- Make type aliases stricter [\\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))\n\n## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)\n\n### Added\n\n- \\(FM-8696\\) - Addition of Support for CentOS 8 [\\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))\n- Add support for additional options to to\\_json\\_pretty [\\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))\n\n### Fixed\n\n- Fix PE detection \\(for the moment\\) [\\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))\n\n## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)\n\n### Added\n\n- \\(MODULES-9915\\) Add type aliases for cloud object store uris [\\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))\n- FM-8411 - add support for debian10 [\\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))\n- \\(FM-8230\\) Convert testing to litmus [\\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))\n- \\(FM-8160\\) Add Windows Server 2019 support [\\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))\n- \\(FM-8048\\) Add RedHat 8 support [\\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))\n- \\(MODULES-9049\\) Add type alias for 'yes' and 'no'. [\\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))\n- add Stdlib::Syslogfacility type [\\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))\n\n### Fixed\n\n- 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))\n- Limit the maximum array size produced by range\\(\\). [\\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))\n\n## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)\n\n### Changed\n\n- pdksync - \\(MODULES-8444\\) - Raise lower Puppet bound [\\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8760\\) Add iterative feature to merge\\(\\) function [\\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))\n\n### Added\n\n- Add a stdlib::ip\\_in\\_range\\(\\) function [\\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))\n\n## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)\n\n### Added\n\n- \\(MODULES-8404\\) - Relax `Stdlib::Filesource` type [\\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))\n- Creates new type Stdlib::IP::Address::V6::CIDR [\\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))\n- \\(MODULES-8137\\) - Addition of support for SLES 15 [\\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))\n- \\(MODULES-8322\\) Consider IPs with /0 as valid [\\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))\n- Add a function to compare the OS version [\\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))\n- \\(MODULES-8273\\) - Make unquoted classes useable [\\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))\n- add Function extname\\(\\) [\\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))\n- \\(MODULES-7024\\) Add 20-octet MAC addresses [\\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))\n\n### Fixed\n\n- pdksync - \\(FM-7655\\) Fix rubygems-update for ruby \\< 2.3 [\\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))\n- fix ensure\\_packages duplicate checking [\\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))\n\n## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)\n\n[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)\n\n### Added\n\n- pdksync - \\(MODULES-6805\\) metadata.json shows support for puppet 6 [\\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney))\n- \\(maint\\) Convert from mocking with mocha to rspec-mocks [\\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek))\n\n### Fixed\n\n- \\(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))\n- Fix `pick` function docs [\\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher))\n- \\(MODULES-7768\\) Handle nil in delete\\_undef\\_values\\(\\) function [\\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))\n- Update docs for 'concat' to be correct [\\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))\n\n## 5.0.0\n### Summary\nThis 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::*`. \n\n**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.**\n\n#### Fixed\n- Docs URLs corrected.\n- Docs clarified that `Stdlib::Unixpath` only matches absolute paths.\n- `dirname()` now fails when passed an empty string.\n- `basename()` documentation clarified.\n- Corrected documentation of `count()` wrt matches and empty string.\n- Corrected example in `getparam()` and added note about equivalent in puppet.\n- Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function.\n\n#### Added\n- Support added for symbolic file nodes.\n- `loadjson()` and `loadyml()` now compatible with HTTPS files.\n- `loadjson()` and `loadyml()` now compatible with HTTP basic auth files.\n- `any2array` now returns and empty array when given an empty string.\n- Support has now been added for Ubuntu 18.04.\n- `seeded_rand_string()` function has been added.\n\n#### Changed\n- PDK update `1.5.0` has been applied.\n- `size()` function deprecated for Puppet 6 and above.\n- `wrt` functions moved to Puppet as of Puppet 6.\n- `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.\n- Added note that `abs()` is in puppet since 6.0.0.\n- Added information to `base64` function about Binary data type.\n- Added note to `camelcase()` that function is now in puppet.\n- Added note to `capitalize()` that function is now in puppet.\n- Added note to `ceiling()` that function is now in puppet.\n- Added note to `chomp()` that function is now in puppet.\n- Added note to `chop()` that function is now in puppet.\n- Added note how to do equivalence of `clamp()` function in puppet 6.\n- Added note that `concat()` can be done with + since puppet 4.0.0.\n- Added note to `convert_base()` how to do this with puppet core.\n- Added equivalent puppet core way of doing `count()`.\n- Added docs for equivalent puppet language for `delete_regexp()`.\n- Added docs for equivalent language constructs for `delete_at()`.\n- Added puppet 4 equivalent for `delete_undef()` function.\n- Added equivalent puppet language for `delete_values()`.\n- Updated `delete()` function with docs about equivalent language.\n- Added docs that - between arrays is the same as `difference()`.\n- Added note to `downcase()` that function is now in puppet.\n- Added note to `empty()` that function is now in puppet.\n- Added note to `flatten()` that function is now in puppet.\n- Added note to `floor()` that function is now in puppet.\n- Added note to `get_module_path()` that puppet has similar function.\n- Amended documentation for `getvar()`.\n- Add note to `grep()` that `filter()` in puppet does the same.\n- Updated `has_key()` with equivalent puppet lang expresion.\n- Updated the `hash()` function to show equivalent expression.\n- Added note about more formatting options with `String()` in puppet.\n- Added note to `join()` that it is in puppet since 5.4.0.\n- Added note to `keys()` that it is in puppet since 5.4.0.\n- Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0.\n- Updated `member()` with equivalent language expression example.\n- Updated `merge()` with puppt language equivalent example.\n- Updated `min()` and `max()` with note that they are in puppet.\n- Updated `num2bool()` with information that Boolean can convert.\n- Updated `prefix()` function with equivalent operation in pupppet.\n- Updated `range()` with information that Integer can be used.\n- Updated `reject()` with equivalent filter() call.\n- Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it.\n- Added note to `round()` that it has moved to puppet in 6.0.0.\n- Added note to `size()` that `length()` is in puppet since 5.4.0.\n- Added note to `sort()` that is has moved to Puppet in 6.0.0.\n- Updated `str2bool()` with a note that Boolean can handle conversion.\n- Added note to `strftime()` that it moved to puppet in 4.8.0.\n- Added note to `suffix()` that the same can be done with `map()`.\n- Updated `time()` to mention Timespan and Timestamp data types.\n- Added note to `values_at()` for equivalent slice operation in language.\n- Added note to `values()` that it moved to puppet in 5.5.0.\n- Corrected docs for `keys()` - in puppet since 5.5.0.\n- Added note to `length()` that function moved to puppet.\n- Updated README.md with deprecations for functions moved to puppet.\n- Updated documentation of `values_at()`.\n- Updated README with note from `time()` about data types for time.\n- Updated README for `strintf_hash()` (supported by builtin sprintf).\n- Updated README with deprecation of `hash()` function (use data type).\n- Updated README `suffix` with equiv example for `map`.\n- Updated README with `reject` equivalent call to `filter`.\n- Updated README with `range` equiv use of type system + `each`.\n- Updated README with `prefix` equiv func using `map`.\n- Updated README for `num2bool` with info about Boolean type.\n- Updated README `str2bool` with information about `Boolean` equivalent.\n- Updated README `merge` with info about `+` operator equivalent.\n- Updated README `member` with equivalent alternative in language.\n- Updated README `join_keys_to_values` with link to String.new.\n- Updated README `has_key` shows deprecation in favor of `in`.\n- Updated README `grep` adds information about `filter`.\n- Updated README and `getvar.rb` as getvar has moved to puppet.\n- Updated README for `getparam` to be the same as in function.\n- Updated README `get_module_path` with info about built in variant.\n- Updated README `difference` to mention `-` operator equiv.\n- Updated README `delete` with built-in alternatives.\n- Updated README `delete_values` with builtin equiv.\n- Updated README `delete_undef` & `delete_regexp` with builtin equiv.\n- Updated README `delete_at` with equivalent built-in examples.\n- Updated README `coun`t to show built-in equiv.\n- Updated README `convert_base` with built-in equiv.\n- Updated README `concat` with built-in equiv using + and <<.\n- Updated README `base_64` with built-in equiv using Binary type.\n- Skipped tests for `abs` if puppet version < 6.0.0.\n- Skipped tests for `min` and `max` if puppet version < 6.0.0.\n- Skipped tests for `floor` if puppet version < 6.0.0.\n- Skipped tests for `ceiling` if puppet version < 6.0.0.\n- Skipped tests for `round` if puppet version < 6.0.0.\n- Skipped tests for `upcase` if puppet version < 6.0.0.\n- Skipped tests for `downcase` if puppet version < 6.0.0.\n- Skipped tests for `capitalize` if puppet version < 6.0.0.\n- Skipped tests for `camelcase` if puppet version < 6.0.0.\n- Skipped tests for strip functions if puppet version < 6.0.0.\n- Skipped tests for `chop` and `chomp` if puppet version < 6.0.0.\n- Skipped tests for `sort` if puppet version < 6.0.0.\n- Removed extra space in `describe` for `abs` test.\n- Updated README and `any2array` with built-in equiv Array.new.\n- Updated README and `any2bool` with built-in equiv Boolean.new.\n- Updated README and `bool2num` with built-in equiv Numeric.new.\n- Updated README and `bool2str` with built-in equiv String.new.\n- Corrected equivalent example for `count`.\n- Updated README and made mention of `filter` in `delete` a link.\n- Updated docs and tests for `strftime`.\n- Updated all acceptance test using Puppet.version.\n- Change 'puppet' to 'Puppet' in function doc strings.\n- HTTP type checks are now case insensitive.\n\n#### Removed\n- Support has been removed for `Scientific 5` and `Debian 7` operating systems.\n- `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed.\n\n## Supported Release 4.25.1\n### Summary\n\nThis 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'.\n\n#### Fixed\n- Remove unneeded execute permission from test files.\n- Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894).\n\n## Supported Release 4.25.0\n### Summary\n\nThis is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes.\n\n#### Added\n- PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332).\n- Update `join_keys_to_values` with an undef statement.\n- Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name.\n- Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'.\n- Type alias `Stdlib::Port` matches a valid TCP/UDP Port number.\n- Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type.\n- Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses,\n- Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'.\n- Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'.\n- 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'.\n- 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.\n\n## Supported Release 4.24.0\n### Summary\n\nThis release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`.\nWe have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7.\n\n#### Added\n- Ability to skip undef values in `to_json_pretty()`.\n- Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216))\n\n#### Changed\n- Indentation for `sync.yml` was fixed.\n- Updated type alias tests and dropped superfluous wrapper classes\n- Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139))\n- `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201))\n\n## Supported Release 4.23.0\n### Summary\n\nThis release is in order to implement Rubocop changes throughout the module.\n\n#### Added\n- Standard and translated readme's have been updated.\n- Rubocop has been implemented in the module and a wide variety of changes have been made to the code.\n- Modulesync changes have been merged into the code.\n\n#### Fixed\n- Minor fix to the readme.\n\n## Supported Release 4.22.0\n### Summary\n\nThis is a clean release in preparation of putting the module through the rubocop process.\n\n#### Added\n- Support has been added for Debian 9\n- 'Stdlib::Mode type' has been added to the module.\n- A type for 'ensure' has been added to the service resources.\n- A new function 'sprintf_hash' has been added to allow the use of named references.\n\n#### Removed\n- 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.\n\n#### Fixed\n- The 'ruby_spec.rb' test file has been altered s that it properly checks results.\n- Example syntax in 'file_line.rb' has been fixed.\n\n## Supported Release 4.21.0\n### Summary\n\nThis is a small feature release that includes a revamped, albeit backwards-compatible file_line type.\n\n#### Added\n- `replace_all_matches_not_matching_line` parameter in file_line\n- additional tests and documentation for file_line\n\n#### Removed\n- duplicate spec test for absolute_path\n\n#### Fixed\n- Unixpath type to allow \"/\" as valid path\n- file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651))\n\n## Supported Release 4.20.0\n### Summary\n\nThis release adds new functions and updated README translations.\n\n#### Added\n- `to_json`, `to_json_pretty`, and `to_yaml` functions\n- new Japanese README translations\n\n#### Fixed\n- compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546))\n\n#### Removed\n- support for EOL platform Debian 6 (Squeeze)\n\n## Supported Release 4.19.0\n### Summary\n\nThis release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line.\n\n#### Added\n- Add validate_domain_name function\n- Add the round function\n- Add type for MAC address\n- Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908))\n- Add new function, fact() (FACT-932)\n\n#### Fixed\n- Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003))\n- Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382))\n- unique function is deprecated for puppet version > 5. (FM-6239)\n- Fix headers in CHANGELOG.md so that headers render correctly\n- ensure_packages, converge ensure values 'present' and 'installed'\n\n#### Changed\n- Removes listed support for EOL Ubuntu versions\n\n## Supported Release 4.18.0\n### Summary\n\nSmall 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.\n\n#### Fixed\n- Reverts lower bound of Puppet requirement to 2.7.20\n\n## Supported Release 4.17.1\n### Summary\n\nSmall release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0.\n\n#### Bugfixes\n- (MODULES-5095) Workaround for PUP-7650\n- (FM-6197) Formatting fixes for file_line resource\n\n\n## Supported Release 4.17.0\n### Summary\nThis 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.\n\n#### Features\n- Addition of POT file / folder structure for i18n.\n- Addition of Internationalized READMEs.\n- `glob()` function\n\n### Fixed\n- Occasional duplicate type definitions when using `defined_with_params()`\n- `file_line` encoding issue on ruby 1.8 (unsupported)\n- Huge readme refresh\n\n## Supported Release 4.16.0\n### Summary\n\nThis 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.\n\n#### Features\n- Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n.\n- All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator.\n- 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.\n- 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.\n- 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.\n- Permit double slash in absolute/Unix path types.\n\n#### Bugfixes\n- Fix unsupported data type error with rspec-puppet server.\n- Now allows test module metadata.json to be read by Puppet.\n- Fix acceptance test failure \"Hiera is not a class\".\n- Removal of unsupported platforms and future parser setting in acceptance tests.\n- Regex for tuple checking has been loosened.\n- Ensure_packages function - Now only tries to apply the resource if not defined.\n- (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat.\n- Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0.\n\n## Supported Release 4.15.0\n### Summary\n\nThis release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update.\n\n#### Features\n- Addition of puppet_server fact to return agents server.\n- Addition of a pry function.\n- Addition of tests for ensure_resources.\n- Addition of FQDN UUID generation function.\n- Addition of Ubuntu Xenial to OS Support.\n\n#### Bugfixes\n- Ensure_packages now works with Ruby < 2.0.\n- Updated the documentation of str2bool function.\n\n## Supported Release 4.14.0\n### Summary\n\nAdds 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.\n\n#### Features\n- Deprecation function now uses puppet stacktrace if available.\n- join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element.\n- Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983).\n- Updated/Fixed ipv4 regex validator (MODULES-3980).\n- Deprecation clarification added to README.\n\n#### Bugfixes\n- README typo fixes.\n- Use .dup to duplicate classes for modification (MODULES-3829).\n- Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec.\n- Broken link to validate_legacy docs fixed.\n- Updates deprecation tests to include future parser.\n\n## Supported Release 4.13.1\n### Summary\n\nThis bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7.\n\nIt 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.\n\n#### Bugfixes\n\n* Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)\n* Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962)\n* Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969)\n* Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases.\n\n\n## Supported Release 4.13.0\n### Summary\n\nThis 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.\n\nMany 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.\n\nSpecial thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.\n\n\n#### Deprecations\n* `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.\n* 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.\n\n\n#### Features\n* Add Puppet 4 data types for Unix, and Windows paths, and URLs.\n* Add `deprecation` function to warn users of functionality that will be removed soon.\n* Add `validate_legacy` function to help with migrating to Puppet 4 data types.\n\n* Add `any2bool` function, a combination of of `string2bool` and `num2bool`.\n* Add `delete_regex` function to delete array elements matching a regular expression.\n* Add `puppet_environmentpath` fact to expose the `environmentpath` setting.\n* Add `regexpescape` function to safely insert arbitrary strings into regular expressions.\n* Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts..\n\n* The `delete` function now also accepts regular expressions as search term.\n* The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file.\n\n#### Bugfixes\n* Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590)\n* Fix `getparam` so that it can now also return `false`. (MODULES-3933)\n* Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests.\n* Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543)\n* Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher.\n\n#### Minor Improvements\n* README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`.\n* The `getvar` function now returns nil in all situations where the variable is not found.\n* Update the `dig44` function with better `undef`, `nil`, and `false` handling.\n* Better wording on `str2bool` argument validation error message.\n\n\n### Known issues\n* The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions.\n* 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.\n\n## Supported Release 4.12.0\n### Summary\n\nThis release provides several new functions, bugfixes, modulesync changes, and some documentation updates.\n\n#### Features\n- Adds `clamp`. This function keeps values within a specified range.\n- Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair.\n- Adds `dig`. This function performs a deep lookup in nested hashes or arrays.\n- Extends the `base64` support to fit `rfc2045` and `rfc4648`.\n- Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses.\n- Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets.\n- Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist.\n- Extends `suffix` to support applying a suffix to keys in a hash.\n- Apply modulesync changes.\n- Add validate_email_address function.\n\n#### Bugfixes\n- Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling.\n- (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed.\n- Fixes to README.md.\n- Fixes catch StandardError rather than the gratuitous Exception\n- Fixes file_line attribute validation.\n- Fixes concat with Hash arguments.\n\n## Supported Release 4.11.0\n### Summary\n\nProvides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.\n\n#### Features\n-  Adds new parser called is_absolute_path\n-  Supports Debian 8\n\n#### Bugfixes\n-  Allow package_provider fact to resolve on PE 3.x\n\n#### Improvements\n- ensures that the test passes independently of changes to rubygems for ensure_resource\n\n## 2015-12-15 - Supported Release 4.10.0\n### Summary\n\nIncludes 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.\n\n#### Features\n- Adds service_provider fact\n- Adds is_a() function\n- Adds package_provider fact\n- Adds validate_ip_address function\n- Adds seeded_rand function\n\n#### Bugfixes\n- Fix backwards compatibility from an improvement to the parseyaml function\n- Renaming of load_module_metadata test to include \\_spec.rb\n- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'\n- Fixed Gemfile to work with ruby 1.8.7\n\n#### Improvements\n- (MODULES-2462) Improvement of parseyaml function\n- Improvement of str2bool function\n- Improvement to readme\n- Improvement of intersection function\n- Improvement of validate_re function\n- Improved speed on Facter resolution of service_provider\n- empty function now handles numeric values\n- Package_provider now prevents deprecation warning about the allow_virtual parameter\n- load_module_metadata now succeeds on empty file\n- Check added to ensure puppetversion value is not nil\n- Improvement to bool2str to return a string of choice using boolean\n- Improvement to naming convention in validate_ipv4_address function\n\n## Supported Release 4.9.1\n### Summary\n\nSmall release for support of newer PE versions. This increments the version of PE in the metadata.json file.\n\n## 2015-09-08 - Supported Release 4.9.0\n### Summary\n\nThis release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.\n\n#### Features\n- (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior\n- (MODULES-2410) Add new functions dos2unix and unix2dos\n- (MODULE-2456) Modify union to accept more than two arrays\n- Adds a convert_base function, which can convert numbers between bases\n- Add a new function \"try_get_value\"\n\n#### Bugfixes\n- n/a\n\n#### Improvements\n- (MODULES-2478) Support root_home fact on AIX through \"lsuser\" command\n- Acceptance test improvements\n- Unit test improvements\n- Readme improvements\n\n## 2015-08-10 - Supported Release 4.8.0\n### Summary\nThis release adds a function for reading metadata.json from any module, and expands file\\_line's abilities.\n\n#### Features\n- New parameter `replace` on `file_line`\n- New function `load_module_metadata()` to load metadata.json and return the content as a hash.\n- Added hash support to `size()`\n\n#### Bugfixes\n- Fix various docs typos\n- Fix `file_line` resource on puppet < 3.3\n\n## 2015-06-22 - Supported Release 4.7.0\n### Summary\n\nAdds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.\n\n#### Features\n- Add support for Solaris 12\n\n#### Bugfixes\n- Fix for AIO Puppet 4\n- Fix time for ruby 1.8.7\n- Specify rspec-puppet version\n- range() fix for typeerror and missing functionality\n- Fix pw_hash() on JRuby < 1.7.17\n- fqdn_rand_string: fix argument error message\n- catch and rescue from looking up non-existent facts\n- Use puppet_install_helper, for Puppet 4\n\n#### Improvements\n- Enforce support for Puppet 4 testing\n- fqdn_rotate/fqdn_rand_string acceptance tests and implementation\n- Simplify mac address regex\n- validate_integer, validate_numeric: explicitely reject hashes in arrays\n- Readme edits\n- Remove all the pops stuff for rspec-puppet\n- Sync via modulesync\n- Add validate_slength optional 3rd arg\n- Move tests directory to examples directory\n\n## 2015-04-14 - Supported Release 4.6.0\n### Summary\n\nAdds functions and function argument abilities, and improves compatibility with the new puppet parser\n\n#### Features\n- MODULES-444: `concat()` can now take more than two arrays\n- `basename()` added to have Ruby File.basename functionality\n- `delete()` can now take an array of items to remove\n- `prefix()` can now take a hash\n- `upcase()` can now take a hash or array of upcaseable things\n- `validate_absolute_path()` can now take an array\n- `validate_cmd()` can now use % in the command to embed the validation file argument in the string\n- MODULES-1473: deprecate `type()` function in favor of `type3x()`\n- MODULES-1473: Add `type_of()` to give better type information on future parser\n- Deprecate `private()` for `assert_private()` due to future parser\n- Adds `ceiling()` to take the ceiling of a number\n- Adds `fqdn_rand_string()` to generate random string based on fqdn\n- Adds `pw_hash()` to generate password hashes\n- Adds `validate_integer()`\n- Adds `validate_numeric()` (like `validate_integer()` but also accepts floats)\n\n#### Bugfixes\n- Fix seeding of `fqdn_rotate()`\n- `ensure_resource()` is more verbose on debug mode\n- Stricter argument checking for `dirname()`\n- Fix `is_domain_name()` to better match RFC\n- Fix `uriescape()` when called with array\n- Fix `file_line` resource when using the `after` attribute with `match`\n\n## 2015-01-14 - Supported Release 4.5.1\n### Summary\n\nThis release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029\n\n#### Bugfixes\n- Facter_dot_d cache will now be stored in puppet libdir instead of tmp\n\n## 2014-12-15 - Supported Release 4.5.0\n### Summary\n\nThis release improves functionality of the member function and adds improved future parser support.\n\n#### Features\n- MODULES-1329: Update member() to allow the variable to be an array.\n- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync\n\n#### Bugfixes\n- Fix range() to work with numeric ranges with the future parser\n- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)\n- Don't require `line` to match the `match` parameter\n\n## 2014-11-10 - Supported Release 4.4.0\n### Summary\nThis release has an overhauled readme, new private manifest function, and fixes many future parser bugs.\n\n#### Features\n- All new shiny README\n- New `private()` function for making private manifests (yay!)\n\n#### Bugfixes\n- Code reuse in `bool2num()` and `zip()`\n- Fix many functions to handle `generate()` no longer returning a string on new puppets\n- `concat()` no longer modifies the first argument (whoops)\n- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()`\n- `to_bytes()` handles PB and EB now\n- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()`\n- Fix `validate_cmd()` for windows\n- Correct `validate_string()` docs to reflect non-handling of `undef`\n- Fix `file_line` matching on older rubies\n\n\n## 2014-07-15 - Supported Release 4.3.2\n### Summary\n\nThis release merely updates metadata.json so the module can be uninstalled and\nupgraded via the puppet module command.\n\n## 2014-07-14 - Supported Release 4.3.1\n### Summary\nThis supported release updates the metadata.json to work around upgrade behavior of the PMT.\n\n#### Bugfixes\n- Synchronize metadata.json with PMT-generated metadata to pass checksums\n\n## 2014-06-27 - Supported Release 4.3.0\n### Summary\nThis release is the first supported release of the stdlib 4 series. It remains\nbackwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.\n\n#### Features\n- New `bool2str()` function\n- New `camelcase()` function\n\n#### Bugfixes\n- Fix `has_interface_with()` when interfaces fact is nil\n\n## 2014-06-04 - Release 4.2.2\n### Summary\n\nThis release adds PE3.3 support in the metadata and fixes a few tests.\n\n## 2014-05-08 - Release - 4.2.1\n### Summary\nThis release moves a stray symlink that can cause problems.\n\n## 2014-05-08 - Release - 4.2.0\n### Summary\nThis release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x\n\n#### Features\n- New `base64()` function\n- New `deep_merge()` function\n- New `delete_undef_values()` function\n- New `delete_values()` function\n- New `difference()` function\n- New `intersection()` function\n- New `is_bool()` function\n- New `pick_default()` function\n- New `union()` function\n- New `validate_ipv4_address` function\n- New `validate_ipv6_address` function\n- Update `ensure_packages()` to take an option hash as a second parameter.\n- Update `range()` to take an optional third argument for range step\n- Update `validate_slength()` to take an optional third argument for minimum length\n- Update `file_line` resource to take `after` and `multiple` attributes\n\n#### Bugfixes\n- Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes.\n- Allow facts.d facts to contain `=` in the value\n- Fix `root_home` fact on darwin systems\n- Fix `concat()` to work with a second non-array argument\n- Fix `floor()` to work with integer strings\n- Fix `is_integer()` to return true if passed integer strings\n- Fix `is_numeric()` to return true if passed integer strings\n- Fix `merge()` to work with empty strings\n- Fix `pick()` to raise the correct error type\n- Fix `uriescape()` to use the default URI.escape list\n- Add/update unit & acceptance tests.\n\n\n## 2014-03-04 - Supported Release - 3.2.1\n### Summary\nThis is a supported release\n\n#### Bugfixes\n- Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions.\n\n#### Known bugs\n* No known bugs\n\n---\n\n##### 2013-05-06 - Jeff McCune <jeff@puppetlabs.com> - 4.1.0\n\n * (#20582) Restore facter\\_dot\\_d to stdlib for PE users (3b887c8)\n * (maint) Update Gemfile with GEM\\_FACTER\\_VERSION (f44d535)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> - 4.1.0\n\n * Terser method of string to array conversion courtesy of ethooz. (d38bce0)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Refactor ensure\\_resource expectations (b33cc24)\n\n##### 2013-05-06 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * Changed str-to-array conversion and removed abbreviation. (de253db)\n\n##### 2013-05-03 - Alex Cline <acline@us.ibm.com> 4.1.0\n\n * (#20548) Allow an array of resource titles to be passed into the ensure\\_resource function (e08734a)\n\n##### 2013-05-02 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.1.0\n\n * Add a dirname function (2ba9e47)\n\n##### 2013-04-29 - Mark Smith-Guerrero <msmithgu@gmail.com> - 4.1.0\n\n * (maint) Fix a small typo in hash() description (928036a)\n\n##### 2013-04-12 - Jeff McCune <jeff@puppetlabs.com> - 4.0.2\n\n * Update user information in gemspec to make the intent of the Gem clear.\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.1\n\n * Fix README function documentation (ab3e30c)\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * stdlib 4.0 drops support with Puppet 2.7\n * stdlib 4.0 preserves support with Puppet 3\n\n##### 2013-04-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add ability to use puppet from git via bundler (9c5805f)\n\n##### 2013-04-10 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Make stdlib usable as a Ruby GEM (e81a45e)\n\n##### 2013-04-10 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Add a count function (f28550e)\n\n##### 2013-03-31 - Amos Shapira <ashapira@atlassian.com> - 4.0.0\n\n * (#19998) Implement any2array (7a2fb80)\n\n##### 2013-03-29 - Steve Huff <shuff@vecna.org> - 4.0.0\n\n * (19864) num2bool match fix (8d217f0)\n\n##### 2013-03-20 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * Allow comparisons of Numeric and number as String (ff5dd5d)\n\n##### 2013-03-26 - Richard Soderberg <rsoderberg@mozilla.com> - 4.0.0\n\n * add suffix function to accompany the prefix function (88a93ac)\n\n##### 2013-03-19 - Kristof Willaert <kristof.willaert@gmail.com> - 4.0.0\n\n * Add floor function implementation and unit tests (0527341)\n\n##### 2012-04-03 - Eric Shamow <eric@puppetlabs.com> - 4.0.0\n\n * (#13610) Add is\\_function\\_available to stdlib (961dcab)\n\n##### 2012-12-17 - Justin Lambert <jlambert@eml.cc> - 4.0.0\n\n * str2bool should return a boolean if called with a boolean (5d5a4d4)\n\n##### 2012-10-23 - Uwe Stuehler <ustuehler@team.mobile.de> - 4.0.0\n\n * Fix number of arguments check in flatten() (e80207b)\n\n##### 2013-03-11 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Add contributing document (96e19d0)\n\n##### 2013-03-04 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * Add missing documentation for validate\\_augeas and validate\\_cmd to README.markdown (a1510a1)\n\n##### 2013-02-14 - Joshua Hoblitt <jhoblitt@cpan.org> - 4.0.0\n\n * (#19272) Add has\\_element() function (95cf3fe)\n\n##### 2013-02-07 - Raphaël Pinson <raphael.pinson@camptocamp.com> - 4.0.0\n\n * validate\\_cmd(): Use Puppet::Util::Execution.execute when available (69248df)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_augeas function (3a97c23)\n\n##### 2012-12-06 - Raphaël Pinson <raphink@gmail.com> - 4.0.0\n\n * Add validate\\_cmd function (6902cc5)\n\n##### 2013-01-14 - David Schmitt <david@dasz.at> - 4.0.0\n\n * Add geppetto project definition (b3fc0a3)\n\n##### 2013-01-02 - Jaka Hudoklin <jakahudoklin@gmail.com> - 4.0.0\n\n * Add getparam function to get defined resource parameters (20e0e07)\n\n##### 2013-01-05 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * (maint) Add Travis CI Support (d082046)\n\n##### 2012-12-04 - Jeff McCune <jeff@puppetlabs.com> - 4.0.0\n\n * Clarify that stdlib 3 supports Puppet 3 (3a6085f)\n\n##### 2012-11-30 - Erik Dalén <dalen@spotify.com> - 4.0.0\n\n * maint: style guideline fixes (7742e5f)\n\n##### 2012-11-09 - James Fryman <james@frymanet.com> - 4.0.0\n\n * puppet-lint cleanup (88acc52)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 4.0.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)\n\n##### 2012-09-18 - Chad Metcalf <chad@wibidata.com> - 3.2.0\n\n * Add an ensure\\_packages function. (8a8c09e)\n\n##### 2012-11-23 - Erik Dalén <dalen@spotify.com> - 3.2.0\n\n * (#17797) min() and max() functions (9954133)\n\n##### 2012-05-23 - Peter Meier <peter.meier@immerda.ch> - 3.2.0\n\n * (#14670) autorequire a file\\_line resource's path (dfcee63)\n\n##### 2012-11-19 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Add join\\_keys\\_to\\_values function (ee0f2b3)\n\n##### 2012-11-17 - Joshua Harlan Lifton <lifton@puppetlabs.com> - 3.2.0\n\n * Extend delete function for strings and hashes (7322e4d)\n\n##### 2012-08-03 - Gary Larizza <gary@puppetlabs.com> - 3.2.0\n\n * Add the pick() function (ba6dd13)\n\n##### 2012-03-20 - Wil Cooley <wcooley@pdx.edu> - 3.2.0\n\n * (#13974) Add predicate functions for interface facts (f819417)\n\n##### 2012-11-06 - Joe Julian <me@joejulian.name> - 3.2.0\n\n * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 3.1.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 3.1.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.1\n\n * Fix accidental removal of facts\\_dot\\_d.rb in 3.0.0 release\n\n##### 2012-08-16 - Jeff McCune <jeff@puppetlabs.com> - 3.0.0\n\n * stdlib 3.0 drops support with Puppet 2.6\n * stdlib 3.0 preserves support with Puppet 2.7\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 3.0.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (ba789de)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 3.0.0\n\n * (#2157) Remove facter\\_dot\\_d for compatibility with external facts (f92574f)\n\n##### 2012-04-10 - Chris Price <chris@puppetlabs.com> - 3.0.0\n\n * (#13693) moving logic from local spec\\_helper to puppetlabs\\_spec\\_helper (85f96df)\n\n##### 2012-10-25 - Jeff McCune <jeff@puppetlabs.com> - 2.5.1\n\n * (maint) Fix spec failures resulting from Facter API changes (97f836f)\n\n##### 2012-10-23 - Matthaus Owens <matthaus@puppetlabs.com> - 2.5.0\n\n * Add PE facts to stdlib (cdf3b05)\n\n##### 2012-08-15 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Explicitly load functions used by ensure\\_resource (9fc3063)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add better docs about duplicate resource failures (97d327a)\n\n##### 2012-08-13 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Handle undef for parameter argument (4f8b133)\n\n##### 2012-08-07 - Dan Bode <dan@puppetlabs.com> - 2.5.0\n\n * Add function ensure\\_resource and defined\\_with\\_params (a0cb8cd)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Disable tests that fail on 2.6.x due to #15912 (c81496e)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * (Maint) Fix mis-use of rvalue functions as statements (4492913)\n\n##### 2012-08-20 - Jeff McCune <jeff@puppetlabs.com> - 2.5.0\n\n * Add .rspec file to repo root (88789e8)\n\n##### 2012-06-07 - Chris Price <chris@puppetlabs.com> - 2.4.0\n\n * Add support for a 'match' parameter to file\\_line (a06c0d8)\n\n##### 2012-08-07 - Erik Dalén <dalen@spotify.com> - 2.4.0\n\n * (#15872) Add to\\_bytes function (247b69c)\n\n##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0\n\n * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88)\n\n##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0\n\n * (#2157) Make facts\\_dot\\_d compatible with external facts (5fb0ddc)\n\n##### 2012-03-16 - Steve Traylen <steve.traylen@cern.ch> - 2.4.0\n\n * (#13205) Rotate array/string randomley based on fqdn, fqdn\\_rotate() (fef247b)\n\n##### 2012-05-22 - Peter Meier <peter.meier@immerda.ch> - 2.3.3\n\n * fix regression in #11017 properly (f0a62c7)\n\n##### 2012-05-10 - Jeff McCune <jeff@puppetlabs.com> - 2.3.3\n\n * Fix spec tests using the new spec\\_helper (7d34333)\n\n##### 2012-05-10 - Puppet Labs <support@puppetlabs.com> - 2.3.2\n\n * Make file\\_line default to ensure => present (1373e70)\n * Memoize file\\_line spec instance variables (20aacc5)\n * Fix spec tests using the new spec\\_helper (1ebfa5d)\n * (#13595) initialize\\_everything\\_for\\_tests couples modules Puppet ver (3222f35)\n * (#13439) Fix MRI 1.9 issue with spec\\_helper (15c5fd1)\n * (#13439) Fix test failures with Puppet 2.6.x (665610b)\n * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca)\n * (#13494) Specify the behavior of zero padded strings (61891bb)\n\n##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3\n\n* (#11607) Add Rakefile to enable spec testing\n* (#12377) Avoid infinite loop when retrying require json\n\n##### 2012-03-13 Puppet Labs <support@puppetlabs.com> - 2.3.1\n\n* (#13091) Fix LoadError bug with puppet apply and puppet\\_vardir fact\n\n##### 2012-03-12 Puppet Labs <support@puppetlabs.com> - 2.3.0\n\n* Add a large number of new Puppet functions\n* Backwards compatibility preserved with 2.2.x\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.2.1\n\n* Documentation only release for the Forge\n\n##### 2011-12-30 Puppet Labs <support@puppetlabs.com> - 2.1.2\n\n* Documentation only release for PE 2.0.x\n\n##### 2011-11-08 Puppet Labs <support@puppetlabs.com> - 2.2.0\n\n* #10285 - Refactor json to use pson instead.\n* Maint  - Add watchr autotest script\n* Maint  - Make rspec tests work with Puppet 2.6.4\n* #9859  - Add root\\_home fact and tests\n\n##### 2011-08-18 Puppet Labs <support@puppetlabs.com> - 2.1.1\n\n* Change facts.d paths to match Facter 2.0 paths.\n* /etc/facter/facts.d\n* /etc/puppetlabs/facter/facts.d\n\n##### 2011-08-17 Puppet Labs <support@puppetlabs.com> - 2.1.0\n\n* Add R.I. Pienaar's facts.d custom facter fact\n* facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are\n  automatically loaded now.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 2.0.0\n\n* Rename whole\\_line to file\\_line\n* This is an API change and as such motivating a 2.0.0 release according to semver.org.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.1.0\n\n* Rename append\\_line to whole\\_line\n* This is an API change and as such motivating a 1.1.0 release.\n\n##### 2011-08-04 Puppet Labs <support@puppetlabs.com> - 1.0.0\n\n* Initial stable release\n* Add validate\\_array and validate\\_string functions\n* Make merge() function work with Ruby 1.8.5\n* Add hash merging function\n* Add has\\_key function\n* Add loadyaml() function\n* Add append\\_line native\n\n##### 2011-06-21 Jeff McCune <jeff@puppetlabs.com> - 0.1.7\n\n* Add validate\\_hash() and getvar() functions\n\n##### 2011-06-15 Jeff McCune <jeff@puppetlabs.com> - 0.1.6\n\n* Add anchor resource type to provide containment for composite classes\n\n##### 2011-06-03 Jeff McCune <jeff@puppetlabs.com> - 0.1.5\n\n* Add validate\\_bool() function to stdlib\n\n##### 0.1.4 2011-05-26 Jeff McCune <jeff@puppetlabs.com>\n\n* Move most stages after main\n\n##### 0.1.3 2011-05-25 Jeff McCune <jeff@puppetlabs.com>\n\n* Add validate\\_re() function\n\n##### 0.1.2 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Update to add annotated tag\n\n##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>\n\n* Add stdlib::stages class with a standard set of stages\n\n\n\\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*\n",
      "license": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n",
      "reference": "# Reference\n\n<!-- DO NOT EDIT: This document was generated by Puppet Strings -->\n\n## Table of Contents\n\n### Classes\n\n* [`stdlib`](#stdlib): This module manages stdlib.\n* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by\nthe stdlib class, and should not be declared independently.\n\n### Resource types\n\n* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.\n* [`file_line`](#file_line): Ensures that a given line is contained within a file.\n\n### Functions\n\n* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number\n* [`any2array`](#any2array): This converts any object to an array containing that object.\n* [`any2bool`](#any2bool): Converts 'anything' to a boolean.\n* [`assert_private`](#assert_private): Sets the current class or definition as private.\n* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted\n* [`basename`](#basename): Strips directory (and optional suffix) from a filename\n* [`bool2num`](#bool2num): Converts a boolean to a number.\n* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.\n* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.\n* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.\n* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.\n* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.\n* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.\n* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value\n(parameter order doesn't matter).\n* [`concat`](#concat): Appends the contents of multiple arrays into array 1.\n* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a\nspecified base, as a string.\n* [`count`](#count): Counts the number of elements in array.\n* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.\n* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.\n* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a\nstring, or key from a hash.\n* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.\n* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression\nfrom an array or key from a hash.\n* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.\n* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.\n* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.  The uniqueness key - can appear once. The msg is the message te\n* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).\n* [`difference`](#difference): This function returns the difference between two arrays.\n* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an\narray of keys containing a path.\n* [`dig44`](#dig44): **DEPRECATED**: Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n* [`dirname`](#dirname): Returns the dirname of a path.\n* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.\n* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.\n* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.\n* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.\n* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a\nresource.\n* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a\nresource.\n* [`fact`](#fact): Digs into the facts hash using dot-notation\n* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array\nas a result.\n* [`floor`](#floor): Returns the largest integer less or equal to the argument.\n* [`fqdn_rand_string`](#fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an\noptional seed for repeatable randomness.\n* [`fqdn_rotate`](#fqdn_rotate): Rotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current\nenvironment.\n* [`getparam`](#getparam): Returns the value of a resource's parameter.\n* [`getvar`](#getvar): Lookup a variable in a given namespace.\n* [`glob`](#glob): Uses same patterns as Dir#glob.\n* [`grep`](#grep): This function searches through an array and returns any elements that match\nthe provided regular expression.\n* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.\n* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.\n* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.\n* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.\n* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.\n* [`intersection`](#intersection): This function returns an array of the intersection of two.\n* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.\nThis is equivalent to the `=~` type checks.\n* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.\n* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.\n* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.\n* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is\na syntactically correct domain name.\n* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.\n* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.\n* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.\n* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.\n* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or\na decimal (base 10) integer in String form.\n* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.\n* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.\n* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.\n* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.\n* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.\n* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.\n* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.\n* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.\n* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a\nseparator.\n* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.\n* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib\n* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.\n* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data\nin the corresponding native data type.\n* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.\n* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.\n* [`member`](#member): This function determines if a variable is a member of an array.\n* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.\n* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns\nthe resulting hash.\n* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.\n* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a\ntrue boolean.\n* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.\n* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct\nPuppet structure\n* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct\nPuppet structure.\n* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct\nPuppet structure.\n* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string.\n* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.\n* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.\n* [`private`](#private): **Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.\n* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable\non most POSIX systems.\n* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as\nan array.\n* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n* [`reject`](#reject): This function searches through an array and rejects all elements that match\nthe provided regular expression.\n* [`reverse`](#reverse): Reverses the order of a string or array.\n* [`round`](#round): Rounds a number to the nearest integer\n* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.\n* [`seeded_rand`](#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.\n* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.\n* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.\n* [`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\n* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.\n* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.\n* [`size`](#size): Returns the number of elements in a string, an array or a hash\n* [`sort`](#sort): Sorts strings and arrays lexically.\n* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.\n* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.\n* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value\n* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the\nlast Period).\n* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs\n* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n* [`str2bool`](#str2bool): This converts a string to a boolean.\n* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+\n* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for\nOS X versions >= 10.7).\n* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from\nevery string inside an array.\n* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys\nin a hash.\n* [`swapcase`](#swapcase): This function will swap the existing case of a string.\n* [`time`](#time): This function will return the current time since epoch as an integer.\n* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.\n* [`to_json`](#to_json): Convert a data structure and output to JSON\n* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON\n* [`to_yaml`](#to_yaml): Convert a data structure and output it as YAML\n* [`try_get_value`](#try_get_value): **DEPRECATED:** this function is deprecated, please use dig() instead.\n* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;\n* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.\n* [`type_of`](#type_of): Returns the type of the passed value.\n* [`union`](#union): This function returns a union of two or more arrays.\n* [`unique`](#unique): This function will remove duplicates from strings and arrays.\n* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.\n* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.\n* [`uriescape`](#uriescape): Urlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.\n* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_array`](#validate_array): Validate the passed value represents an array.\n* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens\n* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.\n* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.\n* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.\n* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.\n* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.\n* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.\n* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).\n* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.\n* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.\n* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular\nexpressions.\n* [`validate_re`](#validate_re): Perform validation of a string against one or more regular\nexpressions.\n* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value\n* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures.\n* [`validate_string`](#validate_string): Validate that all passed values are string data structures\n* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using\nOpenSSL. Verifies that the certficate's signature was created from the\nsupplied key.\n* [`values`](#values): When given a hash this function will return the values of that hash.\n* [`values_at`](#values_at): Finds value inside an array based on location.\n* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.\n\n### Data types\n\n* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type\n* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String\n* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String\n* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions  The first pattern is originally from is_absolute_path, which had it from 2\n* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions\n* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions\n* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr\n* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions\n* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che\n* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)\n* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions\n* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)\n* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che\n* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions\n* [`Stdlib::Datasize`](#stdlibdatasize)\n* [`Stdlib::Ensure::File`](#stdlibensurefile)\n* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)\n* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)\n* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)\n* [`Stdlib::Ensure::Service`](#stdlibensureservice)\n* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars\n* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types\n* [`Stdlib::Fqdn`](#stdlibfqdn)\n* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)\n* [`Stdlib::HTTPUrl`](#stdlibhttpurl)\n* [`Stdlib::Host`](#stdlibhost)\n* [`Stdlib::HttpStatus`](#stdlibhttpstatus)\n* [`Stdlib::IP::Address`](#stdlibipaddress)\n* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)\n* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)\n* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)\n* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)\n* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)\n* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)\n* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars\n* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)\n* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)\n* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address\n* [`Stdlib::ObjectStore`](#stdlibobjectstore)\n* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)\n* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)\n* [`Stdlib::Port`](#stdlibport)\n* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)\n* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)\n* [`Stdlib::Port::Privileged`](#stdlibportprivileged)\n* [`Stdlib::Port::Registered`](#stdlibportregistered)\n* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)\n* [`Stdlib::Port::User`](#stdlibportuser)\n* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)\n* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with \"/\" or is NUL\n* [`Stdlib::Windowspath`](#stdlibwindowspath)\n* [`Stdlib::Yes_no`](#stdlibyes_no)\n\n## Classes\n\n### <a name=\"stdlib\"></a>`stdlib`\n\nMost of stdlib's features are automatically loaded by Puppet, but this class should be\ndeclared in order to use the standardized run stages.\n\nDeclares all other classes in the stdlib module. Currently, this consists\nof stdlib::stages.\n\n### <a name=\"stdlibstages\"></a>`stdlib::stages`\n\nDeclares various run-stages for deploying infrastructure,\nlanguage runtimes, and application layers.\n\nThe high level stages are (in order):\n * setup\n * main\n * runtime\n * setup_infra\n * deploy_infra\n * setup_app\n * deploy_app\n * deploy\n\n#### Examples\n\n##### \n\n```puppet\nnode default {\n  include ::stdlib\n  class { java: stage => 'runtime' }\n}\n```\n\n## Resource types\n\n### <a name=\"anchor\"></a>`anchor`\n\nIn Puppet 2.6, when a class declares another class, the resources in the\ninterior class are not contained by the exterior class. This interacts badly\nwith the pattern of composing complex modules from smaller classes, as it\nmakes it impossible for end users to specify order relationships between the\nexterior class and other modules.\n\nThe anchor type lets you work around this. By sandwiching any interior\nclasses between two no-op resources that _are_ contained by the exterior\nclass, you can ensure that all resources in the module are contained.\n\n```\nclass ntp {\n  # These classes will have the correct order relationship with each\n  # other. However, without anchors, they won't have any order\n  # relationship to Class['ntp'].\n  class { 'ntp::package': }\n  -> class { 'ntp::config': }\n  -> class { 'ntp::service': }\n\n  # These two resources \"anchor\" the composed classes within the ntp\n  # class.\n  anchor { 'ntp::begin': } -> Class['ntp::package']\n  Class['ntp::service']    -> anchor { 'ntp::end': }\n}\n```\n\nThis allows the end user of the ntp module to establish require and before\nrelationships with Class['ntp']:\n\n```\nclass { 'ntp': } -> class { 'mcollective': }\nclass { 'mcollective': } -> class { 'ntp': }\n```\n\n#### Parameters\n\nThe following parameters are available in the `anchor` type.\n\n* [`name`](#name)\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nThe name of the anchor resource.\n\n### <a name=\"file_line\"></a>`file_line`\n\nThe implementation matches the full line, including whitespace at the\nbeginning and end.  If the line is not contained in the given file, Puppet\nwill append the line to the end of the file to ensure the desired state.\nMultiple resources may be declared to manage multiple lines in the same file.\n\n* Ensure Example\n```\nfile_line { 'sudo_rule':\n  path => '/etc/sudoers',\n  line => '%sudo ALL=(ALL) ALL',\n}\n\nfile_line { 'sudo_rule_nopw':\n  path => '/etc/sudoers',\n  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',\n}\n```\nIn this example, Puppet will ensure both of the specified lines are\ncontained in the file /etc/sudoers.\n\n* Match Example\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => present,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n  match  => '^export\\ HTTP_PROXY\\=',\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and replace it with the value in line.\n\n* Examples With `ensure => absent`:\n\nThis type has two behaviors when `ensure => absent` is set.\n\nOne possibility is to set `match => ...` and `match_for_absence => true`,\nas in the following example:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure            => absent,\n  path              => '/etc/bashrc',\n  match             => '^export\\ HTTP_PROXY\\=',\n  match_for_absence => true,\n}\n```\n\nIn this code example match will look for a line beginning with export\nfollowed by HTTP_PROXY and delete it.  If multiple lines match, an\nerror will be raised unless the `multiple => true` parameter is set.\n\nNote that the `line => ...` parameter would be accepted BUT IGNORED in\nthe above example.\n\nThe second way of using `ensure => absent` is to specify a `line => ...`,\nand no match:\n\n```\nfile_line { 'bashrc_proxy':\n  ensure => absent,\n  path   => '/etc/bashrc',\n  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',\n}\n```\n\n> *Note:*\nWhen ensuring lines are absent this way, the default behavior\nthis time is to always remove all lines matching, and this behavior\ncan't be disabled.\n\n* Encoding example:\n\n```\nfile_line { \"XScreenSaver\":\n  ensure   => present,\n  path     => '/root/XScreenSaver',\n  line     => \"*lock: 10:00:00\",\n  match    => '^*lock:',\n  encoding => \"iso-8859-1\",\n}\n```\n\nFiles with special characters that are not valid UTF-8 will give the\nerror message \"invalid byte sequence in UTF-8\".  In this case, determine\nthe correct file encoding and specify the correct encoding using the\nencoding attribute, the value of which needs to be a valid Ruby character\nencoding.\n\n**Autorequires:** If Puppet is managing the file that will contain the line\nbeing managed, the file_line resource will autorequire that file.\n\n#### Properties\n\nThe following properties are available in the `file_line` type.\n\n##### `ensure`\n\nValid values: `present`, `absent`\n\nManage the state of this type.\n\nDefault value: `present`\n\n##### `line`\n\nThe line to be appended to the file or used to replace matches found by the match attribute.\n\n#### Parameters\n\nThe following parameters are available in the `file_line` type.\n\n* [`after`](#after)\n* [`append_on_no_match`](#append_on_no_match)\n* [`encoding`](#encoding)\n* [`match`](#match)\n* [`match_for_absence`](#match_for_absence)\n* [`multiple`](#multiple)\n* [`name`](#name)\n* [`path`](#path)\n* [`provider`](#provider)\n* [`replace`](#replace)\n* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)\n\n##### <a name=\"after\"></a>`after`\n\nAn optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)\nThis is also takes a regex.\n\n##### <a name=\"append_on_no_match\"></a>`append_on_no_match`\n\nValid values: ``true``, ``false``\n\nIf true, append line if match is not found. If false, do not append line if a match is not found\n\nDefault value: ``true``\n\n##### <a name=\"encoding\"></a>`encoding`\n\nFor files that are not UTF-8 encoded, specify encoding such as iso-8859-1\n\nDefault value: `UTF-8`\n\n##### <a name=\"match\"></a>`match`\n\nAn optional ruby regular expression to run against existing lines in the file.\nIf a match is found, we replace that line rather than adding a new line.\nA regex comparison is performed against the line value and if it does not\nmatch an exception will be raised.\n\n##### <a name=\"match_for_absence\"></a>`match_for_absence`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match should be applied when ensure => absent.\nIf set to true and match is set, the line that matches match will be deleted.\nIf set to false (the default), match is ignored when ensure => absent.\nWhen `ensure => present`, match_for_absence is ignored.\n\nDefault value: ``false``\n\n##### <a name=\"multiple\"></a>`multiple`\n\nValid values: ``true``, ``false``\n\nAn optional value to determine if match can change multiple lines.\nIf set to false, an exception will be raised if more than one line matches\n\n##### <a name=\"name\"></a>`name`\n\nnamevar\n\nAn arbitrary name used as the identity of the resource.\n\n##### <a name=\"path\"></a>`path`\n\nThe file Puppet will ensure contains the line specified by the line parameter.\n\n##### <a name=\"provider\"></a>`provider`\n\nThe specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually\ndiscover the appropriate provider for your platform.\n\n##### <a name=\"replace\"></a>`replace`\n\nValid values: ``true``, ``false``\n\nIf true, replace line that matches. If false, do not write line if a match is found\n\nDefault value: ``true``\n\n##### <a name=\"replace_all_matches_not_matching_line\"></a>`replace_all_matches_not_matching_line`\n\nValid values: ``true``, ``false``\n\nConfigures the behavior of replacing all lines in a file which match the `match` parameter regular expression,\nregardless of whether the specified line is already present in the file.\n\nDefault value: ``false``\n\n## Functions\n\n### <a name=\"abs\"></a>`abs`\n\nType: Ruby 3.x API\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\n#### `abs()`\n\nFor example -34.56 becomes 34.56.\nTakes a single integer or float value as an argument.\n\n> *Note:*\n  **Deprected** from Puppet 6.0.0, the built-in\n  ['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.\n\nReturns: `Any` The absolute value of the given number if it was an Integer\n\n### <a name=\"any2array\"></a>`any2array`\n\nType: Ruby 3.x API\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\n#### `any2array()`\n\nEmpty argument lists are converted to an empty array. Arrays are left\nuntouched. Hashes are converted to arrays of alternating keys and values.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)\n  function is used to create a new Array..\n\n  ```\n  $hsh = {'key' => 42, 'another-key' => 100}\n  notice(Array($hsh))\n  ```\n\nWould notice `[['key', 42], ['another-key', 100]]`\n\nThe Array data type also has a special mode to \"create an array if not already an array\"\n\n  ```\n  notice(Array({'key' => 42, 'another-key' => 100}, true))\n  ```\n\nWould notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being\ntransformed into an array.\n\nReturns: `Array` The new array containing the given object\n\n### <a name=\"any2bool\"></a>`any2bool`\n\nType: Ruby 3.x API\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\n#### `any2bool()`\n\nIn practise it does the following:\n* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true\n* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false\n* Booleans will just return their original value\n* Number (or a string representation of a number) > 0 will return true, otherwise false\n* undef will return false\n* Anything else will return true\n\nAlso see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)\nfunction.\n\nReturns: `Boolean` The boolean value of the object that was given\n\n### <a name=\"assert_private\"></a>`assert_private`\n\nType: Ruby 3.x API\n\nCalling the class or definition from outside the current module will fail.\n\n#### `assert_private()`\n\nCalling the class or definition from outside the current module will fail.\n\nReturns: `Any` set the current class or definition as private.\n\n### <a name=\"base64\"></a>`base64`\n\nType: Ruby 3.x API\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n#### `base64()`\n\n> **Note:*\n    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.\n    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`\n    function for reading a file with binary (non UTF-8) content.\n\nReturns: `String` The encoded/decoded va\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nEncode and decode a string\n\n  $encodestring = base64('encode', 'thestring')\n  $decodestring = base64('decode', 'dGhlc3RyaW5n')\n\nExplicitly define encode/decode method: default, strict, urlsafe\n\n  $method = 'default'\n  $encodestring = base64('encode', 'thestring', $method)\n  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)\n\nEncode a string as if it was binary\n\n $encodestring = String(Binary('thestring', '%s'))\n\nDecode a Binary assuming it is an UTF-8 String\n\n $decodestring = String(Binary(\"dGhlc3RyaW5n\"), \"%s\")\n```\n\n### <a name=\"basename\"></a>`basename`\n\nType: Ruby 3.x API\n\nStrips directory (and optional suffix) from a filename\n\n#### `basename()`\n\nThe basename function.\n\nReturns: `String` The stripped filename\n\n### <a name=\"bool2num\"></a>`bool2num`\n\nType: Ruby 3.x API\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\n#### `bool2num()`\n\nConverts the values:\n  ```\n  false, f, 0, n, and no to 0\n  true, t, 1, y, and yes to 1\n  ```\nRequires a single boolean or string as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),\n  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and\n  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)\n  function are used to convert to numeric values.\n  ```\n  notice(Integer(false)) # Notices 0\n  notice(Float(true))    # Notices 1.0\n  ```\n\nReturns: `Integer` The converted value as a number\n\n### <a name=\"bool2str\"></a>`bool2str`\n\nType: Ruby 3.x API\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\n#### `bool2str()`\n\nThe optional second and third arguments represent what true and false will be\nconverted to respectively. If only one argument is given, it will be\nconverted from a boolean to a string containing 'true' or 'false'.\n\n**Examples of usage**\n\n  ```\n    bool2str(true)                    => 'true'\n    bool2str(true, 'yes', 'no')       => 'yes'\n    bool2str(false, 't', 'f')         => 'f'\n  ```\n\nRequires a single boolean as an input.\n\n> *Note:*\n  since Puppet 5.0.0 it is possible to create new data types for almost any\n  datatype using the type system and the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)\n  function is used to convert to String with many different format options.\n\n  ```\n    notice(String(false))         # Notices 'false'\n    notice(String(true))          # Notices 'true'\n    notice(String(false, '%y'))   # Notices 'yes'\n    notice(String(true, '%y'))    # Notices 'no'\n  ```\n\nReturns: `Any` The converted value to string of the given Boolean\n\n### <a name=\"camelcase\"></a>`camelcase`\n\nType: Ruby 3.x API\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\n#### `camelcase()`\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with\n  a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"capitalize\"></a>`capitalize`\n\nType: Ruby 3.x API\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\n#### `capitalize()`\n\nRequires either a single string or an array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, yhis function has been replaced with a\n  built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)\n  function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"ceiling\"></a>`ceiling`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\n#### `ceiling()`\n\nTakes a single numeric value as an argument.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\n  built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.\n\nReturns: `Integer` The rounded value\n\n### <a name=\"chomp\"></a>`chomp`\n\nType: Ruby 3.x API\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\n#### `chomp()`\n\nFor example `hello\\n` becomes `hello`.\nRequires a single string or array as an input.\n\n> *Note:*\n  **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"chop\"></a>`chop`\n\nType: Ruby 3.x API\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\n#### `chop()`\n\nIf the string ends with `\\r\\n`, both characters are removed. Applying\nchop to an empty string returns an empty string. If you wish to merely\nremove record separators then you should use the `chomp` function.\nRequires a string or array of strings as input.\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.\n\nReturns: `String` The given String, sans the last character.\n\n### <a name=\"clamp\"></a>`clamp`\n\nType: Ruby 3.x API\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n#### `clamp()`\n\nStrings are converted and compared numerically. Arrays of values are flattened\ninto a list for further handling.\n\n> *Note:*\n  From Puppet 6.0.0 this can be done with only core Puppet like this:\n  `[$minval, $maxval, $value_to_clamp].sort[1]`\n\nReturns: `Array[Integer]` The sorted Array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nclamp('24', [575, 187])` returns 187.\nclamp(16, 88, 661)` returns 88.\nclamp([4, 3, '99'])` returns 4.\n```\n\n### <a name=\"concat\"></a>`concat`\n\nType: Ruby 3.x API\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n#### `concat()`\n\n> *Note:*\n  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and\n  merge of hashes, and the `<<`` operator for appending:\n\n`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`\n`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`\n`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`\n\nReturns: `Array` The single concatenated array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nconcat(['1','2','3'],'4') returns ['1','2','3','4']\nconcat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']\n```\n\n### <a name=\"convert_base\"></a>`convert_base`\n\nType: Ruby 3.x API\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n```\n\n#### `convert_base()`\n\nconvert_base(5, 2)` results in: `'101'`\nconvert_base('254', '16')` results in: `'fe'`\n\n> *Note:*\n  Since Puppet 4.5.0 this can be done with the built-in\n  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)\n  function and its many formatting options:\n\n  `$binary_repr = String(5, '%b')` return `\"101\"`\n  `$hex_repr = String(254, \"%x\")`  return `\"fe\"`\n  `$hex_repr = String(254, \"%#x\")` return `\"0xfe\"`\n\n  @return [String] The converted value as a Str\n\nReturns: `Any` converted value as a string\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n```\n\n### <a name=\"count\"></a>`count`\n\nType: Ruby 3.x API\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\n#### `count()`\n\nTakes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.\nIf called with only an array, it counts the number of elements that are not nil/undef/empty-string.\n\n> *Note:*\n  equality is tested with a Ruby method and it is therefore subject to what Ruby considers\n  to be equal. For strings this means that equality is case sensitive.\n\nIn Puppet core, counting can be done in general by using a combination of the core functions\nfilter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).\n\nExample below shows counting values that are not undef.\n\n  ```notice([42, \"hello\", undef].filter |$x| { $x =~ NotUndef }.length)```\n\nWould notice the value 2.\n\nReturns: `Integer` The amount of elements counted within the array\n\n### <a name=\"deep_merge\"></a>`deep_merge`\n\nType: Ruby 3.x API\n\nRecursively merges two or more hashes together and returns the resulting hash.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n#### `deep_merge()`\n\nThe deep_merge function.\n\nReturns: `Hash` The merged h\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }\n$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }\n$merged_hash = deep_merge($hash1, $hash2)\n\nThe resulting hash is equivalent to:\n\n$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }\n\nWhen there is a duplicate key that is a hash, they are recursively merged.\nWhen there is a duplicate key that is not a hash, the key in the rightmost hash will \"win.\"\n```\n\n### <a name=\"defined_with_params\"></a>`defined_with_params`\n\nType: Ruby 3.x API\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\n#### `defined_with_params()`\n\nReturns `true` if a resource with the specified attributes has already been added\nto the catalog, and `false` otherwise.\n\n  ```\n  user { 'dan':\n    ensure => present,\n  }\n\n  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {\n    user { 'dan': ensure => present, }\n  }\n  ```\n\nReturns: `Boolean` returns `true` or `false`\n\n### <a name=\"delete\"></a>`delete`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n#### `delete()`\n\n> *Note:*\nFrom Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash\n`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`\n>\nA global delete from a string can be performed with the\n[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:\n`'abracadabra'.regsubst(/bra/, '', 'G')`\n\nIn general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)\nfunction can filter out entries from arrays and hashes based on keys and/or values.\n\nReturns: `String` The filtered String, if one was given.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])\nWould return: {'a'=>1}\n\ndelete('abracadabra', 'bra')\nWould return: 'acada'\n\n['a', 'b', 'c', 'b'] - 'b'\nWould return: ['a', 'c']\n\n{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])\nWould return: {'a' => '1'}\n\n'abracadabra'.regsubst(/bra/, '', 'G')\nWould return: 'acada'\n```\n\n### <a name=\"delete_at\"></a>`delete_at`\n\nType: Ruby 3.x API\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\n#### `delete_at()`\n\nFor example\n    ```delete_at(['a','b','c'], 1)```\n\nWould return: `['a','c']`\n\n> *Note:*\n  Since Puppet 4 this can be done in general with the built-in\n  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n\n  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```\n\nOr if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:\n  ```\n  $array[0, -1] # the same as all the values\n  $array[2, -1] # all but the first 2 elements\n  $array[0, -3] # all but the last 2 elements\n  $array[1, -2] # all but the first and last element\n  ```\n\nReturns: `Array` The given array, now missing the tar\n\n### <a name=\"delete_regex\"></a>`delete_regex`\n\nType: Ruby 3.x API\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n#### `delete_regex()`\n\nMultiple regular expressions are assumed to be matched as an OR.\n\n> *Note:*\nSince Puppet 4 this can be done in general with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n[\"aaa\", \"aba\", \"aca\"].filter |$val| { $val !~ /b/ }\nWould return: ['aaa', 'aca']\n\nReturns: `Array` The given array now missing all targeted values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_regex(['a','b','c','b'], 'b')\nWould return: ['a','c']\n\ndelete_regex(['a','b','c','b'], ['b', 'c'])\nWould return: ['a']\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')\nWould return: {'a'=>1,'c'=>3}\n\ndelete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')\nWould return: {'b'=>2,'c'=>3}\n```\n\n### <a name=\"delete_undef_values\"></a>`delete_undef_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n#### `delete_undef_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val =~ NotUndef }\n$hash.filter |$key, $val| { $val =~ NotUndef }\n\nReturns: `Array` The given array now issing of undefined values.\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\n$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})\nWould return: {a => 'A', b => '', d => false}\n\nWhile:\n$array = delete_undef_values(['A','',undef,false])\nWould return: ['A','',false]\n```\n\n### <a name=\"delete_values\"></a>`delete_values`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n#### `delete_values()`\n\n> *Note:*\nSince Puppet 4.0.0 the equivalent can be performed with the\nbuilt-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:\n$array.filter |$val| { $val != 'B' }\n$hash.filter |$key, $val| { $val != 'B' }\n\nReturns: `Hash` The given hash now missing all instances of the targeted value\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndelete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')\nWould return: {'a'=>'A','c'=>'C','B'=>'D'}\n```\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 4.x API\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\n#### `deprecation(String $key, String $message)`\n\nFunction to print deprecation warnings, Logs a warning once for a given key.\n\nThe uniqueness key - can appear once.\nThe msg is the message text including any positional information that is formatted by the\nuser/caller of the method.\nIt is affected by the puppet setting 'strict', which can be set to :error\n(outputs as an error message), :off (no message / error is displayed) and :warning\n(default, outputs a warning)  *Type*: String, String.\n\nReturns: `Any` deprecated warnings\n\n##### `key`\n\nData type: `String`\n\n\n\n##### `message`\n\nData type: `String`\n\n\n\n### <a name=\"deprecation\"></a>`deprecation`\n\nType: Ruby 3.x API\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\n#### `deprecation()`\n\nThe uniqueness key - can appear once. The msg is the message text including any positional\ninformation that is formatted by the user/caller of the method.).\n\nReturns: `String` return deprecation warnings\n\n### <a name=\"difference\"></a>`difference`\n\nType: Ruby 3.x API\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n#### `difference()`\n\nThe returned array is a copy of the original array, removing any items that\nalso appear in the second array.\n\n> *Note:*\nSince Puppet 4 the minus (-) operator in the Puppet language does the same thing:\n['a', 'b', 'c'] - ['b', 'c', 'd']\nWould return: `['a']`\n\nReturns: `Array` The difference between the two given arrays\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\ndifference([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: `[\"a\"]`\n```\n\n### <a name=\"dig\"></a>`dig`\n\nType: Ruby 3.x API\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\n#### `dig()`\n\nIn addition to the required path argument, the function accepts the default argument.\nIt is returned if the path is not correct, if no value was found, or if any other error\nhas occurred.\n\n  ```ruby\n  $data = {\n    'a' => {\n      'b' => [\n        'b1',\n        'b2',\n        'b3',\n      ]\n    }\n  }\n\n  $value = dig($data, ['a', 'b', 2])\n  # $value = 'b3'\n\n  # with all possible options\n  $value = dig($data, ['a', 'b', 2], 'not_found')\n  # $value = 'b3'\n\n  # using the default value\n  $value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')\n  # $value = 'not_found'\n  ```\n\n  1. `$data` The data structure we are working with.\n  2. `['a', 'b', 2]` The path array.\n  3. `not_found` The default value. It is returned if nothing is found.\n\n> **Note:*\n  **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.\n\nReturns: `Any` The function goes through the structure by each path component and tries to return\nthe value at the end of the path.\n\n### <a name=\"dig44\"></a>`dig44`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\n#### `dig44()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n\n```\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = dig44($data, ['a', 'b', 2])\n# $value = 'b3'\n\n# with all possible options\n$value = dig44($data, ['a', 'b', 2], 'not_found')\n# $value = 'b3'\n\n# using the default value\n$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')\n# $value = 'not_found'\n```\n\n> **Note:* **Deprecated** This function has been replaced with a built-in\n  [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of\n  Puppet 4.5.0.\n\nReturns: `String` 'not_found' will be returned if nothing is found\n\n### <a name=\"dirname\"></a>`dirname`\n\nType: Ruby 3.x API\n\nReturns the dirname of a path.\n\n#### `dirname()`\n\nThe dirname function.\n\nReturns: `String` the given path's dirname\n\n### <a name=\"dos2unix\"></a>`dos2unix`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `dos2unix()`\n\nTakes a single string argument.\n\nReturns: `Any` The retrieved version\n\n### <a name=\"downcase\"></a>`downcase`\n\nType: Ruby 3.x API\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\n#### `downcase()`\n\n> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.\n>\nThis function is an implementation of a Ruby class and might not be UTF8 compatible.\nTo ensure compatibility, use this function with Ruby 2.4.0 or greater.\n\nReturns: `String` The converted String, if it was a String that was given\n\n### <a name=\"empty\"></a>`empty`\n\nType: Ruby 3.x API\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\n#### `empty()`\n\n> *Note*: **Deprecated** from Puppet 5.5.0, the built-in\n[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.\n\nReturns: `Any` Returns `true` if the argument is an array or hash that contains no elements,\nor an empty string. Returns `false` when the argument is a numerical value.\n\n### <a name=\"enclose_ipv6\"></a>`enclose_ipv6`\n\nType: Ruby 3.x API\n\nTakes an array of ip addresses and encloses the ipv6 addresses with square brackets.\n\n#### `enclose_ipv6()`\n\nThe enclose_ipv6 function.\n\nReturns: `Any` encloses the ipv6 addresses with square brackets.\n\n### <a name=\"ensure_packages\"></a>`ensure_packages`\n\nType: Ruby 3.x API\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\n#### `ensure_packages()`\n\nIt optionally takes a hash as a second parameter that will be passed as the\nthird argument to the ensure_resource() function.\n\nReturns: `Any` install the passed packages\n\n### <a name=\"ensure_resource\"></a>`ensure_resource`\n\nType: Ruby 3.x API\n\nuser { 'dan':\n  ensure => present,\n}\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n#### `ensure_resource()`\n\nuser { 'dan':\n  ensure => present,\n}\n\nReturns: `Any` created or recreated the passed resource with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nCreates the resource if it does not already exist:\n\n  ensure_resource('user', 'dan', {'ensure' => 'present' })\n\nIf the resource already exists but does not match the specified parameters,\nthis function will attempt to recreate the resource leading to a duplicate\nresource definition error.\n\nAn array of resources can also be passed in and each will be created with\nthe type and parameters specified if it doesn't already exist.\n\n  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})\n```\n\n### <a name=\"ensure_resources\"></a>`ensure_resources`\n\nType: Ruby 3.x API\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n#### `ensure_resources()`\n\nAn hash of resources should be passed in and each will be created with\n  the type and parameters specified if it doesn't already exist.\n\n  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})\n\n  From Hiera Backend:\n\n  userlist:\n    dan:\n      gid: 'mygroup'\n   uid: '600'\n    alex:\n   gid: 'mygroup'\n\n  Call:\n  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})\n\nReturns: `Any` created resources with the passed type and attributes\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nuser { 'dan':\n  gid => 'mygroup',\n  ensure => present,\n}\n```\n\n### <a name=\"fact\"></a>`fact`\n\nType: Ruby 4.x API\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\n#### Examples\n\n##### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n##### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n##### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n#### `fact(String $fact_name)`\n\nSupports the use of dot-notation for referring to structured facts. If a fact requested\ndoes not exist, returns Undef.\n\nReturns: `Any` All information retrieved on the given fact_name\n\n##### Examples\n\n###### Example usage:\n\n```puppet\nfact('osfamily')\nfact('os.architecture')\n```\n\n###### Array indexing:\n\n```puppet\nfact('mountpoints.\"/dev\".options.1')\n```\n\n###### Fact containing a \".\" in the name:\n\n```puppet\nfact('vmware.\"VRA.version\"')\n```\n\n##### `fact_name`\n\nData type: `String`\n\nThe name of the fact to check\n\n### <a name=\"flatten\"></a>`flatten`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\n#### Examples\n\n##### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n#### `flatten()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a\nbuilt-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.\n\nReturns: `Any` convert nested arrays into a single flat array\n\n##### Examples\n\n###### Example usage\n\n```puppet\n\nflatten(['a', ['b', ['c']]])` returns: `['a','b','c']\n```\n\n### <a name=\"floor\"></a>`floor`\n\nType: Ruby 3.x API\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\n#### `floor()`\n\nTakes a single numeric value as an argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with\na built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.\n\nReturns: `Any` the largest integer less or equal to the argument.\n\n### <a name=\"fqdn_rand_string\"></a>`fqdn_rand_string`\n\nType: Ruby 3.x API\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n#### `fqdn_rand_string()`\n\nOptionally, you can specify a character set for the function (defaults to alphanumeric).\n\nArguments\n* An integer, specifying the length of the resulting string.\n* Optionally, a string specifying the character set.\n* Optionally, a string specifying the seed for repeatable randomness.\n\nReturns: `String`\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rand_string(10)\nfqdn_rand_string(10, 'ABCDEF!@$%^')\nfqdn_rand_string(10, '', 'custom seed')\n```\n\n### <a name=\"fqdn_rotate\"></a>`fqdn_rotate`\n\nType: Ruby 3.x API\n\nRotates an array or string a random number of times, combining the `$fqdn` fact\nand an optional seed for repeatable randomness.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n#### `fqdn_rotate()`\n\nThe fqdn_rotate function.\n\nReturns: `Any` rotated array or string\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_rotate(['a', 'b', 'c', 'd'])\nfqdn_rotate('abcd')\nfqdn_rotate([1, 2, 3], 'custom seed')\n```\n\n### <a name=\"fqdn_uuid\"></a>`fqdn_uuid`\n\nType: Ruby 3.x API\n\nReturns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based\non an FQDN string under the DNS namespace\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n#### `fqdn_uuid()`\n\nThe fqdn_uuid function.\n\nReturns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nfqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'\nfqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09\n```\n\n### <a name=\"get_module_path\"></a>`get_module_path`\n\nType: Ruby 3.x API\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n#### `get_module_path()`\n\n> *Note:*\n  that since Puppet 5.4.0 the  built-in\n  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)\n  function in Puppet does the same thing and will return the path to the first found module\n  if given multiple values or an array.\n\nReturns: `Any` Returns the absolute path of the specified module for the current\nenvironment.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$module_path = get_module_path('stdlib')\n```\n\n### <a name=\"getparam\"></a>`getparam`\n\nType: Ruby 3.x API\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n#### `getparam()`\n\nTakes a resource reference and name of the parameter and\nreturns value of resource's parameter. Note that user defined\nresource types are evaluated lazily.\n\nWould notice: 'the value we are getting in this example'\n\n> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type\nand the [ ] operator. The example below is equivalent to a call to getparam():\n  ```Example_resource['example_resource_instance']['param']``\n\nReturns: `Any` value of a resource's parameter.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n# define a resource type with a parameter\ndefine example_resource($param) {\n}\n\n# declare an instance of that type\nexample_resource { \"example_resource_instance\":\n    param => \"'the value we are getting in this example''\"\n}\n\n# Because of order of evaluation, a second definition is needed\n# that will be evaluated after the first resource has been declared\n#\ndefine example_get_param {\n  # This will notice the value of the parameter\n  notice(getparam(Example_resource[\"example_resource_instance\"], \"param\"))\n}\n\n# Declare an instance of the second resource type - this will call notice\nexample_get_param { 'show_notify': }\n```\n\n### <a name=\"getvar\"></a>`getvar`\n\nType: Ruby 3.x API\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\n#### Examples\n\n##### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n##### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n#### `getvar()`\n\n> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function. The new function also has support for\ndigging into a structured value. See the built-in\n[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct\n\nReturns: `Any` undef - if variable does not exist\n\n##### Examples\n\n###### Example usage\n\n```puppet\n$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo\n```\n\n###### Where namespace is stored in a string\n\n```puppet\n$datalocation = 'site::data'\n$bar = getvar(\"${datalocation}::bar\") # Equivalent to $bar = $site::data::bar\n```\n\n### <a name=\"glob\"></a>`glob`\n\nType: Ruby 3.x API\n\nUses same patterns as Dir#glob.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n#### `glob()`\n\nThe glob function.\n\nReturns: `Any` Returns an Array of file entries of a directory or an Array of directories.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])\n```\n\n### <a name=\"grep\"></a>`grep`\n\nType: Ruby 3.x API\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n#### `grep()`\n\n> **Note:** that since Puppet 4.0.0, the built-in\n[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does\nthe \"same\" - as any logic can be used to filter, as opposed to just regular expressions:\n```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```\n\nReturns: `Any` array of elements that match the provided regular expression.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\ngrep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']\n```\n\n### <a name=\"has_interface_with\"></a>`has_interface_with`\n\nType: Ruby 3.x API\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n##### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n#### `has_interface_with()`\n\nValid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.\n\nReturns: `Any` boolean values `true` or `false`\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nhas_interface_with(\"macaddress\", \"x:x:x:x:x:x\") # Returns `false`\nhas_interface_with(\"ipaddress\", \"127.0.0.1\") # Returns `true`\n```\n\n###### If no \"kind\" is given, then the presence of the interface is checked:\n\n```puppet\nhas_interface_with(\"lo\") # Returns `true`\n```\n\n### <a name=\"has_ip_address\"></a>`has_ip_address`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\n#### `has_ip_address()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'ipaddress_IFACE' facts, performing a simple string comparison.\n\nReturns: `Boolean` `true` or `false`\n\n### <a name=\"has_ip_network\"></a>`has_ip_network`\n\nType: Ruby 3.x API\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\n#### `has_ip_network()`\n\nThis function iterates through the 'interfaces' fact and checks the\n'network_IFACE' facts, performing a simple string comparision.\n\nReturns: `Any` Boolean value, `true` if the client has an IP address within the requested network.\n\n### <a name=\"has_key\"></a>`has_key`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n#### `has_key()`\n\n> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet\nlanguage with the following equivalent expression:\n$my_hash = {'key_one' => 'value_one'}\nif 'key_one' in $my_hash {\n  notice('this will be printed')\n\nReturns: `Any` Boolean value\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n\n$my_hash = {'key_one' => 'value_one'}\nif has_key($my_hash, 'key_two') {\n  notice('we will not reach here')\n}\nif has_key($my_hash, 'key_one') {\n  notice('this will be printed')\n}\n```\n\n### <a name=\"hash\"></a>`hash`\n\nType: Ruby 3.x API\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n#### `hash()`\n\n> **Note:** This function has been replaced with the built-in ability to create a new value of almost any\ndata type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function\nin Puppet.\nThis example shows the equivalent expression in the Puppet language:\n  ```\n  Hash(['a',1,'b',2,'c',3])\n  Hash([['a',1],['b',2],['c',3]])\n  ```\n\nReturns: `Any` the converted array as a hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nhash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}\n```\n\n### <a name=\"intersection\"></a>`intersection`\n\nType: Ruby 3.x API\n\nThis function returns an array of the intersection of two.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n#### `intersection()`\n\nThe intersection function.\n\nReturns: `Any` an array of the intersection of two.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\nintersection([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])  # returns [\"b\",\"c\"]\nintersection([\"a\",\"b\",\"c\"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)\n```\n\n### <a name=\"is_a\"></a>`is_a`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n#### `is_a(Any $value, Type $type)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nReturns: `Boolean` Return's `true` or `false`.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n# check a data type\n  foo = 3\n  $bar = [1,2,3]\n  $baz = 'A string!'\n\n  if $foo.is_a(Integer) {\n    notify  { 'foo!': }\n  }\n  if $bar.is_a(Array) {\n    notify { 'bar!': }\n  }\n  if $baz.is_a(String) {\n    notify { 'baz!': }\n  }\n```\n\n##### `value`\n\nData type: `Any`\n\nThe value to be checked\n\n##### `type`\n\nData type: `Type`\n\nThe expected type\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 3.x API\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\n#### Examples\n\n##### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n##### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n#### `is_absolute_path()`\n\nThis function works for windows and unix style paths.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_leg\n\nReturns: `Boolean` Returns `true` or `false`\n\n##### Examples\n\n###### The following values will return true:\n\n```puppet\n$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\nis_absolute_path($my_path)\n$my_path2 = '/var/lib/puppet'\nis_absolute_path($my_path2)\n$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']\nis_absolute_path($my_path3)\n$my_path4 = ['/var/lib/puppet']\nis_absolute_path($my_path4)\n```\n\n###### The following values will return false:\n\n```puppet\nis_absolute_path(true)\nis_absolute_path('../var/lib/puppet')\nis_absolute_path('var/lib/puppet')\n$undefined = undef\nis_absolute_path($undefined)\n```\n\n### <a name=\"is_absolute_path\"></a>`is_absolute_path`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_absolute_path(Any $scope, Any *$args)`\n\nThe is_absolute_path function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_array()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_array\"></a>`is_array`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_array(Any $scope, Any *$args)`\n\nThe is_array function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_bool()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_bool\"></a>`is_bool`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_bool(Any $scope, Any *$args)`\n\nThe is_bool function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_domain_name\"></a>`is_domain_name`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_domain_name()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_email_address\"></a>`is_email_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_email_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_float(Any $scope, Any *$args)`\n\nThe is_float function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_float\"></a>`is_float`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_float()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_function_available\"></a>`is_function_available`\n\nType: Ruby 3.x API\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_function_available()`\n\nThis function accepts a string as an argument.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_hash\"></a>`is_hash`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_hash()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_integer\"></a>`is_integer`\n\nType: Ruby 3.x API\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_integer()`\n\nThe string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'\ndigit may not be followed by other digits as this indicates that the value is octal (base 8).\n\nIf given any other argument `false` is returned.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ip_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ip_address\"></a>`is_ip_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ip_address(Any $scope, Any *$args)`\n\nThe is_ip_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv4_address(Any $scope, Any *$args)`\n\nThe is_ipv4_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv4_address\"></a>`is_ipv4_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv4_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_ipv6_address(Any $scope, Any *$args)`\n\nThe is_ipv6_address function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_ipv6_address\"></a>`is_ipv6_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_ipv6_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_mac_address\"></a>`is_mac_address`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_mac_address()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 3.x API\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_numeric()`\n\nReturns true if the given argument is a Numeric (Integer or Float),\nor a String containing either a valid integer in decimal base 10 form, or\na valid floating point string representation.\n\nThe function recognizes only decimal (base 10) integers and float but not\nintegers in hex (base 16) or octal (base 8) form.\n\nThe string representation may start with a '-' (minus). If a decimal '.' is used,\nit must be followed by at least one digit.\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"is_numeric\"></a>`is_numeric`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_numeric(Any $scope, Any *$args)`\n\nThe is_numeric function.\n\nReturns: `Boolea` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 4.x API\n\nWrapper that calls the Puppet 3.x function of the same name.\n\n#### `is_string(Any $scope, Any *$args)`\n\nThe is_string function.\n\nReturns: `Boolean` A boolean value returned from the called 3.x function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the wrapped method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the wrapped method\n\n### <a name=\"is_string\"></a>`is_string`\n\nType: Ruby 3.x API\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\n#### `is_string()`\n\n> **Note:* **Deprecated** Will be removed in a future version of stdlib. See\n[`validate_legacy`](#validate_legacy).\n\nReturns: `Boolean` Returns `true` or `false`\n\n### <a name=\"join\"></a>`join`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n#### `join()`\n\n> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced\nwith a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.\n\nReturns: `String` The String containing each of the array values\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin(['a','b','c'], \",\") # Results in: \"a,b,c\"\n```\n\n### <a name=\"join_keys_to_values\"></a>`join_keys_to_values`\n\nType: Ruby 3.x API\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n#### `join_keys_to_values()`\n\nKeys are cast to strings. If values are arrays, multiple keys\nare added for each element. The return value is an array in\nwhich each element is one joined key/value pair.\n\n> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and\nline breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual\nformatting of values in the array) - see the `new` function for `String` and its formatting\noptions for `Array` and `Hash`.\n\nReturns: `Hash` The joined hash\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\njoin_keys_to_values({'a'=>1,'b'=>2}, \" is \") # Results in: [\"a is 1\",\"b is 2\"]\njoin_keys_to_values({'a'=>1,'b'=>[2,3]}, \" is \") # Results in: [\"a is 1\",\"b is 2\",\"b is 3\"]\n```\n\n### <a name=\"keys\"></a>`keys`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\n#### `keys()`\n\n> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)\nfunction will be used instead of this function.\n\nReturns: `Array` An array containing each of the hashes key values.\n\n### <a name=\"length\"></a>`length`\n\nType: Ruby 4.x API\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\n#### `length(Variant[String,Array,Hash] $value)`\n\nThe original size() function did not handle Puppets new type capabilities, so this function\nis a Puppet 4 compatible solution.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.\n\nReturns: `Integer` The length of the given object\n\n##### `value`\n\nData type: `Variant[String,Array,Hash]`\n\nThe value whose length is to be found\n\n### <a name=\"load_module_metadata\"></a>`load_module_metadata`\n\nType: Ruby 3.x API\n\nThis function loads the metadata of a given module.\n\n#### Examples\n\n##### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n#### `load_module_metadata()`\n\nThe load_module_metadata function.\n\nReturns: `Any` The modules metadata\n\n##### Examples\n\n###### Example USage:\n\n```puppet\n$metadata = load_module_metadata('archive')\nnotify { $metadata['author']: }\n```\n\n### <a name=\"loadjson\"></a>`loadjson`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n#### `loadjson()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadjson('/etc/puppet/data/myhash.json')\n$myhash = loadjson('https://example.local/my_hash.json')\n$myhash = loadjson('https://username:password@example.local/my_hash.json')\n$myhash = loadjson('no-file.json', {'default' => 'val\n```\n\n### <a name=\"loadyaml\"></a>`loadyaml`\n\nType: Ruby 3.x API\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\n#### Examples\n\n##### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n#### `loadyaml()`\n\nThe first parameter can be a file path or a URL.\nThe second parameter is the default value. It will be returned if the file\nwas not found or could not be parsed.\n\nReturns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.\n\n##### Examples\n\n###### Example Usage:\n\n```puppet\n$myhash = loadyaml('/etc/puppet/data/myhash.yaml')\n$myhash = loadyaml('https://example.local/my_hash.yaml')\n$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')\n$myhash = loadyaml('no-file.yaml', {'default' => 'val\n```\n\n### <a name=\"lstrip\"></a>`lstrip`\n\nType: Ruby 3.x API\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\n#### `lstrip()`\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.\n\nReturns: `String` The stripped string\n\n### <a name=\"max\"></a>`max`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\n#### `max()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.\n\nReturns: `Any` The highest value among those passed in\n\n### <a name=\"member\"></a>`member`\n\nType: Ruby 3.x API\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n#### `member()`\n\nThe variable can be a string, fixnum, or array.\n\n> **Note**: This function does not support nested arrays. If the first argument contains\nnested arrays, it will not recurse through them.\n\n> *Note:*\nSince Puppet 4.0.0 the same can be performed in the Puppet language.\nFor single values the operator `in` can be used:\n`'a' in ['a', 'b']  # true`\nFor arrays by using operator `-` to compute a diff:\n`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`\n`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`\n\n> **Note** that since Puppet 5.2.0, the general form to test the content of an array or\nhash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)\nand [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.\n\nReturns: `Any` Returns whether the given value was a member of the array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nmember(['a','b'], 'b') # Returns: true\nmember(['a', 'b', 'c'], ['a', 'b']) # Returns: true\nmember(['a','b'], 'c') # Returns: false\nmember(['a', 'b', 'c'], ['d', 'b']) # Returns: false\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 3.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n#### `merge()`\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n  `$merged_hash = $hash1 + $has\n\nReturns: `Hash` The merged hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n### <a name=\"merge\"></a>`merge`\n\nType: Ruby 4.x API\n\nWhen there is a duplicate key, the key in the rightmost hash will \"win.\"\n\nNote that since Puppet 4.0.0 the same merge can be achieved with the + operator.\n `$merged_hash = $hash1 + $hash2`\n\nIf merge is given a single Iterable (Array, Hash, etc.) it will call a given block with\nup to three parameters, and merge each resulting Hash into the accumulated result. All other types\nof values returned from the block (typically undef) are skipped (not merged).\n\nThe codeblock can take 2 or three parameters:\n* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)\n* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value\n\nIf 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()`\nwill skip that entry, and a call to `break()` will end the iteration.\n\nThe iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash\ndoes not have to be copied in each iteration and thus will perform much better with large inputs.\n\n#### Examples\n\n##### Using merge()\n\n```puppet\n$hash1 = {'one' => 1, 'two', => 2}\n$hash2 = {'two' => 'dos', 'three', => 'tres'}\n$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}\n```\n\n##### counting occurrences of strings in an array\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n##### skipping values for entries that are longer than 1 char\n\n```puppet\n['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }\n```\n\n#### `merge(Variant[Hash, Undef, String[0,0]] *$args)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Variant[Hash, Undef, String[0,0]]`\n\nRepeated Param - The hashes that are to be merged\n\n#### `merge(Iterable *$args, Callable[3,3] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[3,3]`\n\nA block placed on the repeatable param `args`\n\n#### `merge(Iterable *$args, Callable[2,2] &$block)`\n\nThe merge function.\n\nReturns: `Hash` The merged hash\n\n##### `*args`\n\nData type: `Iterable`\n\nRepeated Param - The hashes that are to be merged\n\n##### `&block`\n\nData type: `Callable[2,2]`\n\nA block placed on the repeatable param `args`\n\n### <a name=\"min\"></a>`min`\n\nType: Ruby 3.x API\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\n#### `min()`\n\nRequires at least one argument.\n\n> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a\nbuilt-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.\n\nReturns: `Any` The lowest value among the given arguments\n\n### <a name=\"num2bool\"></a>`num2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\n#### `num2bool()`\n\n> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.\nSee the new() function in Puppet for the many available type conversions.\n\nReturns: `Boolean` Boolean(0) # false for any zero or negative number\nBoolean(1) # true for any positive number\n\n### <a name=\"os_version_gte\"></a>`os_version_gte`\n\nType: Ruby 4.x API\n\n> *Note:*\nOnly the major version is taken into account.\n\n#### Examples\n\n##### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n#### `os_version_gte(String[1] $os, String[1] $version)`\n\n> *Note:*\nOnly the major version is taken into account.\n\nReturns: `Boolean` `true` or `false\n\n##### Examples\n\n###### Example usage:#\n\n```puppet\nif os_version_gte('Debian', '9') { }\nif os_version_gte('Ubuntu', '18.04') { }\n```\n\n##### `os`\n\nData type: `String[1]`\n\noperating system\n\n##### `version`\n\nData type: `String[1]`\n\n\n\n### <a name=\"parsehocon\"></a>`parsehocon`\n\nType: Ruby 4.x API\n\nThis function accepts HOCON as a string and converts it into the correct\nPuppet structure\n\n#### Examples\n\n##### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n#### `parsehocon(String $hocon_string, Optional[Any] $default)`\n\nThe parsehocon function.\n\nReturns: `Any`\n\n##### Examples\n\n###### How to parse hocon\n\n```puppet\n$data = parsehocon(\"{any valid hocon: string}\")\n```\n\n##### `hocon_string`\n\nData type: `String`\n\nA valid HOCON string\n\n##### `default`\n\nData type: `Optional[Any]`\n\nAn optional default to return if parsing hocon_string fails\n\n### <a name=\"parsejson\"></a>`parsejson`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parsejson()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` convert JSON into Puppet structure\n\n### <a name=\"parseyaml\"></a>`parseyaml`\n\nType: Ruby 3.x API\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\n#### `parseyaml()`\n\n> *Note:*\n  The optional second argument can be used to pass a default value that will\n  be returned if the parsing of YAML string have failed.\n\nReturns: `Any` converted YAML into Puppet structure\n\n### <a name=\"pick\"></a>`pick`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n#### `pick()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the following:\n\n```$real_jenkins_version = pick($::jenkins_version, '1.449')```\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\nReturns: `Any` the first value in a list of values that is not undefined or an empty string.\n\n### <a name=\"pick_default\"></a>`pick_default`\n\nType: Ruby 3.x API\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\n#### `pick_default()`\n\nTypically, this function is used to check for a value in the Puppet\nDashboard/Enterprise Console, and failover to a default value like the\nfollowing:\n\n  $real_jenkins_version = pick_default($::jenkins_version, '1.449')\n\n> *Note:*\n  The value of $real_jenkins_version will first look for a top-scope variable\n  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/\n  Enterprise Console are brought into Puppet as top-scope variables), and,\n  failing that, will use a default value of 1.449.\n\n  Contrary to the pick() function, the pick_default does not fail if\n  all arguments are empty. This allows pick_default to use an empty value as\n  default.\n\nReturns: `Any` This function is similar to a coalesce function in SQL in that it will return\nthe first value in a list of values that is not undefined or an empty string\nIf no value is found, it will return the last argument.\n\n### <a name=\"prefix\"></a>`prefix`\n\nType: Ruby 3.x API\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n#### `prefix()`\n\n> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n['a', 'b', 'c'].map |$x| { \"p${x}\" }\n\nReturns: `Hash` or [Array] The passed values now contains the passed prefix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nprefix(['a','b','c'], 'p')\nWill return: ['pa','pb','pc']\n```\n\n### <a name=\"private\"></a>`private`\n\nType: Ruby 3.x API\n\n**Deprecated:** Sets the current class or definition as private.\nCalling the class or definition from outside the current module will fail.\n\n#### `private()`\n\nThe private function.\n\nReturns: `Any` Sets the current class or definition as private\n\n### <a name=\"pry\"></a>`pry`\n\nType: Ruby 3.x API\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n#### `pry()`\n\nThis is useful for debugging manifest code at specific points during a compilation.\n\nReturns: `Any` debugging information\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\n`pry()`\n```\n\n### <a name=\"pw_hash\"></a>`pw_hash`\n\nType: Ruby 3.x API\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which type of hash to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type            |Specifier|\n|---------------------|---------|\n|MD5                  |1        |\n|SHA-256              |5        |\n|SHA-512 (recommended)|6        |\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\n#### `pw_hash()`\n\nThe first argument to this function is the password to hash. If it is\nundef or an empty string, this function returns undef.\n\nThe second argument to this function is which type of hash to use. It\nwill be converted into the appropriate crypt(3) hash specifier. Valid\nhash types are:\n\n|Hash type            |Specifier|\n|---------------------|---------|\n|MD5                  |1        |\n|SHA-256              |5        |\n|SHA-512 (recommended)|6        |\n\nThe third argument to this function is the salt to use.\n\n> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your\n  environment contains several different operating systems, ensure that they\n  are compatible before using this function.\n\nReturns: `Hash` Provides a hash usable on most POSIX systems.\n\n### <a name=\"range\"></a>`range`\n\nType: Ruby 3.x API\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n#### `range()`\n\nNB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.\n\n> *Note:*\n  Passing a third argument will cause the generated range to step by that\n  interval, e.g.\n\nThe Puppet Language support Integer and Float ranges by using the type system. Those are suitable for\niterating a given number of times.\n\n Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9\n\nReturns: `Any` the range is extrapolated as an array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nrange(\"0\", \"9\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n\nrange(\"00\", \"09\")\nWill return: [0,1,2,3,4,5,6,7,8,9]\n(Zero padded strings are converted to integers automatically)\n\nrange(\"a\", \"c\")\nWill return: [\"a\",\"b\",\"c\"]\n\nrange(\"host01\", \"host10\")\nWill return: [\"host01\", \"host02\", ..., \"host09\", \"host10\"]\n\nrange(\"0\", \"9\", \"2\")\nWill return: [0,2,4,6,8]\n```\n\n### <a name=\"regexpescape\"></a>`regexpescape`\n\nType: Ruby 3.x API\n\nRegexp escape a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `regexpescape()`\n\nThe regexpescape function.\n\nReturns: `String` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"reject\"></a>`reject`\n\nType: Ruby 3.x API\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n#### `reject()`\n\n> *Note:*\nSince Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:\n['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~\n\nReturns: `Any` an array containing all the elements which doesn'' match the provided regular expression\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nreject(['aaa','bbb','ccc','aaaddd'], 'aaa')\n\nWould return: ['bbb','ccc']\n```\n\n### <a name=\"reverse\"></a>`reverse`\n\nType: Ruby 3.x API\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\n#### `reverse()`\n\n> *Note:* that the same can be done with the reverse_each() function in Puppet.\n\nReturns: `Any` reversed string or array\n\n### <a name=\"round\"></a>`round`\n\nType: Ruby 3.x API\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\n#### `round()`\n\n```round(2.9)``` returns ```3```\n\n```round(2.4)``` returns ```2```\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\n  will be used instead of this function.\n\nReturns: `Any` the rounded value as integer\n\n### <a name=\"rstrip\"></a>`rstrip`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### `rstrip()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` the string with leading spaces removed\n\n### <a name=\"seeded_rand\"></a>`seeded_rand`\n\nType: Ruby 3.x API\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\n#### Examples\n\n##### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n#### `seeded_rand()`\n\nGenerates a random whole number greater than or equal to 0 and less\nthan MAX, using the value of SEED for repeatable randomness.  If SEED\nstarts with \"$fqdn:\", this is behaves the same as `fqdn_rand`.\n\nReturns: `Any` random number greater than or equal to 0 and less than MAX\n\n##### Examples\n\n###### **Usage:**\n\n```puppet\nseeded_rand(MAX, SEED).\nMAX must be a positive integer; SEED is any string.\n```\n\n### <a name=\"seeded_rand_string\"></a>`seeded_rand_string`\n\nType: Ruby 4.x API\n\nGenerates a consistent random string of specific length based on provided seed.\n\n#### Examples\n\n##### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n##### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`\n\nThe seeded_rand_string function.\n\nReturns: `String` Random string.\n\n##### Examples\n\n###### Generate a consistently random string of length 8 with a seed:\n\n```puppet\nseeded_rand_string(8, \"${module_name}::redis_password\")\n```\n\n###### Generate a random string from a specific set of characters:\n\n```puppet\nseeded_rand_string(5, '', 'abcdef')\n```\n\n##### `length`\n\nData type: `Integer[1]`\n\nLength of string to be generated.\n\n##### `seed`\n\nData type: `String`\n\nSeed string.\n\n##### `charset`\n\nData type: `Optional[String[2]]`\n\nString that contains characters to use for the random string.\n\n### <a name=\"shell_escape\"></a>`shell_escape`\n\nType: Ruby 3.x API\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\n#### `shell_escape()`\n\n>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single\nquotes.\n\nThis function behaves the same as ruby's Shellwords.shellescape() function.\n\nReturns: `Any` A string of characters with metacharacters converted to their escaped form.\n\n### <a name=\"shell_join\"></a>`shell_join`\n\nType: Ruby 3.x API\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\n#### `shell_join()`\n\nBuilds a command line string from the given array of strings.\nEach array item is escaped for Bourne shell. All items are then joined together, with a single space in between.\nThis function behaves the same as ruby's Shellwords.shelljoin() function\n\nReturns: `Any` a command line string\n\n### <a name=\"shell_split\"></a>`shell_split`\n\nType: Ruby 3.x API\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\n#### `shell_split()`\n\nThis function behaves the same as ruby's Shellwords.shellsplit() function\n\nReturns: `Any` array of tokens\n\n### <a name=\"shuffle\"></a>`shuffle`\n\nType: Ruby 3.x API\n\n@summary\n Randomizes the order of a string or array elements.\n\n#### `shuffle()`\n\n@summary\n Randomizes the order of a string or array elements.\n\nReturns: `Any` randomized string or array\n\n### <a name=\"size\"></a>`size`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\n#### `size()`\n\n> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions\nof Puppet < 5.4.0 use the stdlib length() function.\n\nReturns: `Any` the number of elements in a string, an array or a hash\n\n### <a name=\"sort\"></a>`sort`\n\nType: Ruby 3.x API\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\n#### `sort()`\n\nNote that from Puppet 6.0.0 the same function in Puppet will be used instead of this.\n\nReturns: `Any` sorted string or array\n\n### <a name=\"sprintf_hash\"></a>`sprintf_hash`\n\nType: Ruby 4.x API\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\n#### Examples\n\n##### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n#### `sprintf_hash(String $format, Hash $arguments)`\n\nThe first parameter is format string describing how the rest of the parameters in the hash\nshould be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for\nall the details.\n\nIn the given argument hash with parameters, all keys are converted to symbols so they work\nwith the `sprintf` function.\n\nNote that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the\n`sprintf` function in puppet core.\n\nReturns: `Any` The formatted string.\n\n##### Examples\n\n###### Format a string and number\n\n```puppet\n$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',\n                       { 'foo' => 'a string', 'number' => 5 })\n# $output = 'String: a string / number converted to binary: 101'\n```\n\n##### `format`\n\nData type: `String`\n\nThe format to use.\n\n##### `arguments`\n\nData type: `Hash`\n\nHash with parameters.\n\n### <a name=\"squeeze\"></a>`squeeze`\n\nType: Ruby 3.x API\n\nReturns a new string where runs of the same character that occur in this set are replaced by a single character.\n\n#### `squeeze()`\n\nThe squeeze function.\n\nReturns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.\n\n### <a name=\"stdlibend_with\"></a>`stdlib::end_with`\n\nType: Ruby 4.x API\n\nReturns true if str ends with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`\n\nThe stdlib::end_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::end_with('bar') => true\n'foobar'.stdlib::end_with('foo') => false\n'foobar'.stdlib::end_with(['foo', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `suffixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe suffixes to check\n\n### <a name=\"stdlibensure\"></a>`stdlib::ensure`\n\nType: Puppet Language\n\nfunction to cast ensure parameter to resource specific value\n\n#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`\n\nThe stdlib::ensure function.\n\nReturns: `String`\n\n##### `ensure`\n\nData type: `Variant[Boolean, Enum['present', 'absent']]`\n\n\n\n##### `resource`\n\nData type: `Enum['directory', 'link', 'mounted', 'service', 'file']`\n\n\n\n### <a name=\"stdlibextname\"></a>`stdlib::extname`\n\nType: Ruby 4.x API\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\n#### Examples\n\n##### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n#### `stdlib::extname(String $filename)`\n\nIf Path is a Dotfile, or starts with a Period, then the starting Dot is not\ndealt with the Start of the Extension.\n\nAn empty String will also be returned, when the Period is the last Character\nin Path.\n\nReturns: `String` The Extension starting from the last Period\n\n##### Examples\n\n###### Determining the Extension of a Filename\n\n```puppet\nstdlib::extname('test.rb')       => '.rb'\nstdlib::extname('a/b/d/test.rb') => '.rb'\nstdlib::extname('test')          => ''\nstdlib::extname('.profile')      => ''\n```\n\n##### `filename`\n\nData type: `String`\n\nThe Filename\n\n### <a name=\"stdlibip_in_range\"></a>`stdlib::ip_in_range`\n\nType: Ruby 4.x API\n\nReturns true if the ipaddress is within the given CIDRs\n\n#### Examples\n\n##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`\n\nThe stdlib::ip_in_range function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)\n\n```puppet\nstdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true\n```\n\n##### `ipaddress`\n\nData type: `String`\n\nThe IP address to check\n\n##### `range`\n\nData type: `Variant[String, Array]`\n\nOne CIDR or an array of CIDRs\ndefining the range(s) to check against\n\n### <a name=\"stdlibstart_with\"></a>`stdlib::start_with`\n\nType: Ruby 4.x API\n\nReturns true if str starts with one of the prefixes given. Each of the prefixes should be a String.\n\n#### Examples\n\n##### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`\n\nThe stdlib::start_with function.\n\nReturns: `Boolean` True or False\n\n##### Examples\n\n###### \n\n```puppet\n'foobar'.stdlib::start_with('foo') => true\n'foobar'.stdlib::start_with('bar') => false\n'foObar'.stdlib::start_with(['bar', 'baz']) => false\n```\n\n##### `test_string`\n\nData type: `String`\n\nThe string to check\n\n##### `prefixes`\n\nData type: `Variant[String[1],Array[String[1], 1]]`\n\nThe prefixes to check.\n\n### <a name=\"str2bool\"></a>`str2bool`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\n#### `str2bool()`\n\n> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.\nSee the function new() in Puppet for details what the Boolean data type supports.\n\nReturns: `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\nlike: 0, F,f, N,n, false, FALSE, no to 'false'.\n\n### <a name=\"str2saltedpbkdf2\"></a>`str2saltedpbkdf2`\n\nType: Ruby 3.x API\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\n#### Examples\n\n##### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n##### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n#### `str2saltedpbkdf2()`\n\nConvert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.\nNote, however, that Apple changes what's required periodically and this may not work for the latest\nversion of macOS. If that is the case you should get a helpful error message when Puppet tries to set\nthe pasword using the parameters you provide to the user resource.\n\nReturns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.\n\n##### Examples\n\n###### Plain text password and salt\n\n```puppet\n$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)\nuser { 'jdoe':\n  ensure     => present,\n  iterations => $pw_info['interations'],\n  password   => $pw_info['password_hex'],\n  salt       => $pw_info['salt_hex'],\n}\n```\n\n###### Sensitive password and salt\n\n```puppet\n$pw = Sensitive.new('Pa55w0rd')\n$salt = Sensitive.new('Using s0m3 s@lt')\n$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))\nuser { 'jdoe':\n  ensure     => present,\n  iterations => unwrap($pw_info)['interations'],\n  password   => unwrap($pw_info)['password_hex'],\n  salt       => unwrap($pw_info)['salt_hex'],\n}\n```\n\n### <a name=\"str2saltedsha512\"></a>`str2saltedsha512`\n\nType: Ruby 3.x API\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\n#### `str2saltedsha512()`\n\nGiven any simple string, you will get a hex version\nof a salted-SHA512 password hash that can be inserted into your Puppet\nmanifests as a valid password attribute.\n\nReturns: `Any` converted string as a hex version of a salted-SHA512 password hash\n\n### <a name=\"strip\"></a>`strip`\n\nType: Ruby 3.x API\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n#### `strip()`\n\n> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` String or Array converted\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nstrip(\"    aaa   \")\nWould result in: \"aaa\"\n```\n\n### <a name=\"suffix\"></a>`suffix`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n#### `suffix()`\n\n> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map\nfunction in Puppet. This example does the same as the example above:\n\n```['a', 'b', 'c'].map |$x| { \"${x}p\" }```\n\nReturns: `Any` Array or Hash with updated elements containing the passed suffix\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nsuffix(['a','b','c'], 'p')\nWill return: ['ap','bp','cp']\n```\n\n### <a name=\"swapcase\"></a>`swapcase`\n\nType: Ruby 3.x API\n\nThis function will swap the existing case of a string.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n#### `swapcase()`\n\nThe swapcase function.\n\nReturns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nswapcase(\"aBcD\")\nWould result in: \"AbCd\"\n```\n\n### <a name=\"time\"></a>`time`\n\nType: Ruby 3.x API\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n#### `time()`\n\n> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and\nTimespan (a duration). The following example is equivalent to calling time() without\nany arguments:\n\n```Timestamp()```\n\nReturns: `Any` the current time since epoch as an integer.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\ntime()\nWill return something like: 1311972653\n```\n\n### <a name=\"to_bytes\"></a>`to_bytes`\n\nType: Ruby 3.x API\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\n#### `to_bytes()`\n\nTakes a single string value as an argument.\nThese conversions reflect a layperson's understanding of\n1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.\n\nReturns: `Any` converted value into bytes\n\n### <a name=\"to_json\"></a>`to_json`\n\nType: Ruby 4.x API\n\nConvert a data structure and output to JSON\n\n#### Examples\n\n##### how to output JSON\n\n```puppet\n# output json to a file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json($myhash),\n  }\n```\n\n#### `to_json(Any $data)`\n\nThe to_json function.\n\nReturns: `Any` converted data to json\n\n##### Examples\n\n###### how to output JSON\n\n```puppet\n# output json to a file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json($myhash),\n  }\n```\n\n##### `data`\n\nData type: `Any`\n\ndata structure which needs to be converted into JSON\n\n### <a name=\"to_json_pretty\"></a>`to_json_pretty`\n\nType: Ruby 4.x API\n\nConvert data structure and output to pretty JSON\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]] $opts)`\n\nThe to_json_pretty function.\n\nReturns: `Any` converted data to pretty json\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n* how to output pretty JSON to file\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty($myhash),\n  }\n\n* how to output pretty JSON skipping over keys with undef values\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => undef,\n    }, true),\n  }\n\n* how to output pretty JSON using tabs for indentation\n  file { '/tmp/my.json':\n    ensure  => file,\n    content => to_json_pretty({\n      param_one => 'value',\n      param_two => {\n        param_more => 42,\n      },\n    }, nil, {indent => '    '}),\n  }\n```\n\n##### `data`\n\nData type: `Variant[Hash, Array]`\n\ndata structure which needs to be converted to pretty json\n\n##### `skip_undef`\n\nData type: `Optional[Optional[Boolean]]`\n\nvalue `true` or `false`\n\n##### `opts`\n\nData type: `Optional[Struct[{\nindent       => Optional[String],\nspace        => Optional[String],\nspace_before => Optional[String],\nobject_nl    => Optional[String],\narray_nl     => Optional[String],\nallow_nan    => Optional[Boolean],\nmax_nesting  => Optional[Integer[-1,default]],\n}]]`\n\nhash-map of settings passed to JSON.pretty_generate, see\nhttps://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.\nNote that `max_nesting` doesn't take the value `false`; use `-1` instead.\n\n### <a name=\"to_yaml\"></a>`to_yaml`\n\nType: Ruby 4.x API\n\nConvert a data structure and output it as YAML\n\n#### Examples\n\n##### How to output YAML\n\n```puppet\n# output yaml to a file\n  file { '/tmp/my.yaml':\n    ensure  => file,\n    content => to_yaml($myhash),\n  }\n```\n\n##### Use options control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation: 4})\n}\n```\n\n#### `to_yaml(Any $data, Optional[Hash] $options)`\n\nThe to_yaml function.\n\nReturns: `String`\n\n##### Examples\n\n###### How to output YAML\n\n```puppet\n# output yaml to a file\n  file { '/tmp/my.yaml':\n    ensure  => file,\n    content => to_yaml($myhash),\n  }\n```\n\n###### Use options control the output format\n\n```puppet\nfile { '/tmp/my.yaml':\n  ensure  => file,\n  content => to_yaml($myhash, {indentation: 4})\n}\n```\n\n##### `data`\n\nData type: `Any`\n\n\n\n##### `options`\n\nData type: `Optional[Hash]`\n\n\n\n### <a name=\"try_get_value\"></a>`try_get_value`\n\nType: Ruby 3.x API\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\n#### `try_get_value()`\n\nKey can contain slashes to describe path components. The function will go down\nthe structure and try to extract the required value.\n``\n$data = {\n  'a' => {\n    'b' => [\n      'b1',\n      'b2',\n      'b3',\n    ]\n  }\n}\n\n$value = try_get_value($data, 'a/b/2', 'not_found', '/')\n=> $value = 'b3'\n```\n```\na -> first hash key\nb -> second hash key\n2 -> array index starting with 0\n\nnot_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.\n/ -> (optional) path delimiter. Defaults to '/'.\n```\n\nIn addition to the required \"key\" argument, \"try_get_value\" accepts default\nargument. It will be returned if no value was found or a path component is\nmissing. And the fourth argument can set a variable path separator.\n\nReturns: `Any` Looks up into a complex structure of arrays and hashes and returns a value\nor the default value if nothing was found.\n\n### <a name=\"type\"></a>`type`\n\nType: Ruby 3.x API\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type()`\n\nplease use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type3x\"></a>`type3x`\n\nType: Ruby 3.x API\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\n#### `type3x()`\n\n* string\n* array\n* hash\n* float\n* integer\n* boolean\n\nReturns: `Any` the type when passed a value. Type can be one of:\n\n### <a name=\"type_of\"></a>`type_of`\n\nType: Ruby 4.x API\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\n#### Examples\n\n##### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n##### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n#### `type_of(Any $value)`\n\nSee the documentation for \"The Puppet Type System\" for more information about types.\nSee the `assert_type()` function for flexible ways to assert the type of a value.\n\nThe built-in type() function in puppet is generally preferred over this function\nthis function is provided for backwards compatibility.\n\nReturns: `String` the type of the passed value\n\n##### Examples\n\n###### how to compare values' types\n\n```puppet\n# compare the types of two values\nif type_of($first_value) != type_of($second_value) { fail(\"first_value and second_value are different types\") }\n```\n\n###### how to compare against an abstract type\n\n```puppet\nunless type_of($first_value) <= Numeric { fail(\"first_value must be Numeric\") }\nunless type_of{$first_value) <= Collection[1] { fail(\"first_value must be an Array or Hash, and contain at least one element\") }\n```\n\n##### `value`\n\nData type: `Any`\n\n\n\n### <a name=\"union\"></a>`union`\n\nType: Ruby 3.x API\n\nThis function returns a union of two or more arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n#### `union()`\n\nThe union function.\n\nReturns: `Any` a unionized array of two or more arrays\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunion([\"a\",\"b\",\"c\"],[\"b\",\"c\",\"d\"])\nWould return: [\"a\",\"b\",\"c\",\"d\"]\n```\n\n### <a name=\"unique\"></a>`unique`\n\nType: Ruby 3.x API\n\nThis function will remove duplicates from strings and arrays.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n#### `unique()`\n\nThe unique function.\n\nReturns: `Any` String or array with duplicates removed\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nunique(\"aabbcc\")\nWill return: abc\n\nYou can also use this with arrays:\n\nunique([\"a\",\"a\",\"b\",\"b\",\"c\",\"c\"])\nThis returns: [\"a\",\"b\",\"c\"]\n```\n\n### <a name=\"unix2dos\"></a>`unix2dos`\n\nType: Ruby 3.x API\n\nTakes a single string argument.\n\n#### `unix2dos()`\n\nTakes a single string argument.\n\nReturns: `Any` the DOS version of the given string.\n\n### <a name=\"upcase\"></a>`upcase`\n\nType: Ruby 3.x API\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n#### `upcase()`\n\n> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` converted string ot array of strings to uppercase\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nupcase(\"abcd\")\nWill return ABCD\n```\n\n### <a name=\"uriescape\"></a>`uriescape`\n\nType: Ruby 3.x API\n\nUrlencodes a string or array of strings.\nRequires either a single string or an array as an input.\n\n#### `uriescape()`\n\nThe uriescape function.\n\nReturns: `String` a string that contains the converted value\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 3.x API\n\nValidate the string represents an absolute path in the filesystem.  This function works\nfor windows and unix style paths.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n#### `validate_absolute_path()`\n\nThe validate_absolute_path function.\n\nReturns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'\n    validate_absolute_path($my_path)\n    $my_path2 = '/var/lib/puppet'\n    validate_absolute_path($my_path2)\n    $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']\n    validate_absolute_path($my_path3)\n    $my_path4 = ['/var/lib/puppet','/usr/share/puppet']\n    validate_absolute_path($my_path4)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_absolute_path(true)\n    validate_absolute_path('../var/lib/puppet')\n    validate_absolute_path('var/lib/puppet')\n    validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])\n    validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])\n    $undefined = undef\n    validate_absolute_path($undefin\n```\n\n### <a name=\"validate_absolute_path\"></a>`validate_absolute_path`\n\nType: Ruby 4.x API\n\nValidate the string represents an absolute path in the filesystem.\n\n#### `validate_absolute_path(Any $scope, Any *$args)`\n\nThe validate_absolute_path function.\n\nReturns: `Boolean` A boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 3.x API\n\nValidate that all passed values are array data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n#### `validate_array()`\n\nThe validate_array function.\n\nReturns: `Any` validate array\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_array = [ 'one', 'two' ]\n    validate_array($my_array)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_array(true)\n    validate_array('some_string')\n    $undefined = undef\n    validate_array($undefined\n```\n\n### <a name=\"validate_array\"></a>`validate_array`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an array.\n\n#### `validate_array(Any $scope, Any *$args)`\n\nThe validate_array function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_augeas\"></a>`validate_augeas`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n#### `validate_augeas()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be the name of the Augeas lens to use.\nIf Augeas fails to parse the string with the lens, the compilation will\nabort with a parse error.\n\nA third argument can be specified, listing paths which should\nnot be found in the file. The `$file` variable points to the location\nof the temporary file being tested in the Augeas tree.\n\nReturns: `Any` validate string using an Augeas lens\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nIf you want to make sure your passwd content never contains\na user `foo`, you could write:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])\n\nIf you wanted to ensure that no users used the '/bin/barsh' shell,\nyou could use:\n\n  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell=\"/bin/barsh\"]']\n\nIf a fourth argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 3.x API\n\nValidate that all passed values are either true or false. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n#### `validate_bool()`\n\nThe validate_bool function.\n\nReturns: `Any` validate boolean\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $iamtrue = true\n    validate_bool(true)\n    validate_bool(true, true, false, $iamtrue)\n\nThe following values will fail, causing compilation to abort:\n\n    $some_array = [ true ]\n    validate_bool(\"false\")\n    validate_bool(\"true\")\n    validate_bool($some_array)\n```\n\n### <a name=\"validate_bool\"></a>`validate_bool`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a boolean.\n\n#### `validate_bool(Any $scope, Any *$args)`\n\nThe validate_bool function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_cmd\"></a>`validate_cmd`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n#### `validate_cmd()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a path to a test command\ntaking a % as a placeholder for the file path (will default to the end).\nIf the command, launched against a tempfile containing the passed string,\nreturns a non-null value, compilation will abort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\nA helpful error message can be returned like this:\n\nReturns: `Any` validate of a string with an external command\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nDefaults to end of path\n  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')\n\n% as file location\n  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')\n```\n\n### <a name=\"validate_domain_name\"></a>`validate_domain_name`\n\nType: Ruby 3.x API\n\nValidate that all values passed are syntactically correct domain names.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n#### `validate_domain_name()`\n\nThe validate_domain_name function.\n\nReturns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_domain_name = 'server.domain.tld'\n    validate_domain_name($my_domain_name)\n    validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_domain_name(1)\n    validate_domain_name(true)\n    validate_domain_name('invalid domain')\n    validate_domain_name('-foo.example.com')\n    validate_domain_name('www.example.2com')\n```\n\n### <a name=\"validate_email_address\"></a>`validate_email_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid email addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n#### `validate_email_address()`\n\nThe validate_email_address function.\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  $my_email = \"waldo@gmail.com\"\n  validate_email_address($my_email)\n  validate_email_address(\"bob@gmail.com\", \"alice@gmail.com\", $my_email)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 'bad_email@/d/efdf.com' ]\n  validate_email_address($some_array)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 3.x API\n\nValidate that all passed values are hash data structures. Abort catalog\ncompilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n#### `validate_hash()`\n\nThe validate_hash function.\n\nReturns: `Any` validate hash\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n    $my_hash = { 'one' => 'two' }\n    validate_hash($my_hash)\n\nThe following values will fail, causing compilation to abort:\n\n    validate_hash(true)\n    validate_hash('some_string')\n    $undefined = undef\n    validate_hash($undefined)\n```\n\n### <a name=\"validate_hash\"></a>`validate_hash`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a hash.\n\n#### `validate_hash(Any $scope, Any *$args)`\n\nThe validate_hash function.\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n#### `validate_integer()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.\n\nReturns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nThe following values will pass:\n\n  validate_integer(1)\n  validate_integer(1, 2)\n  validate_integer(1, 1)\n  validate_integer(1, 2, 0)\n  validate_integer(2, 2, 2)\n  validate_integer(2, '', 0)\n  validate_integer(2, undef, 0)\n  $foo = undef\n  validate_integer(2, $foo, 0)\n  validate_integer([1,2,3,4,5], 6)\n  validate_integer([1,2,3,4,5], 6, 0)\n\nPlus all of the above, but any combination of values passed as strings ('1' or \"1\").\nPlus all of the above, but with (correct) combinations of negative integer values.\n\nThe following values will not:\n\n  validate_integer(true)\n  validate_integer(false)\n  validate_integer(7.0)\n  validate_integer({ 1 => 2 })\n  $foo = undef\n  validate_integer($foo)\n  validate_integer($foobaridontexist)\n\n  validate_integer(1, 0)\n  validate_integer(1, true)\n  validate_integer(1, '')\n  validate_integer(1, undef)\n  validate_integer(1, , 0)\n  validate_integer(1, 2, 3)\n  validate_integer(1, 3, 2)\n  validate_integer(1, 3, true)\n\nPlus all of the above, but any combination of values passed as strings ('false' or \"false\").\nPlus all of the above, but with incorrect combinations of negative integer values.\nPlus all of the above, but with non-integer items in arrays or maximum / minimum argument.\n```\n\n### <a name=\"validate_integer\"></a>`validate_integer`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an integer.\n\n#### `validate_integer(Any $scope, Any *$args)`\n\nThe validate_integer function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IP addresses,\nregardless they are IPv4 or IPv6\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n#### `validate_ip_address()`\n\nThe validate_ip_address function.\n\nReturns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ip_address($my_ip)\n  validate_ip_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ip_address(1)\n  validate_ip_address($my_ip)\n  validate_ip_address(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ip_address($some_array)\n```\n\n### <a name=\"validate_ip_address\"></a>`validate_ip_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ip_address.\n\n#### `validate_ip_address(Any $scope, Any *$args)`\n\nThe validate_ip_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv4 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n#### `validate_ipv4_address()`\n\nThe validate_ipv4_address function.\n\nReturns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"1.2.3.4\"\n  validate_ipv4_address($my_ip)\n  validate_ipv4_address(\"8.8.8.8\", \"172.16.0.1\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ 1, true, false, \"garbage string\", \"3ffe:505:2\" ]\n  validate_ipv4_address($some_array)\n```\n\n### <a name=\"validate_ipv4_address\"></a>`validate_ipv4_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv4_address.\n\n#### `validate_ipv4_address(Any $scope, Any *$args)`\n\nThe validate_ipv4_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 3.x API\n\nValidate that all values passed are valid IPv6 addresses.\nFail compilation if any value fails this check.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n#### `validate_ipv6_address()`\n\nThe validate_ipv6_address function.\n\nReturns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  $my_ip = \"3ffe:505:2\"\n  validate_ipv6_address(1)\n  validate_ipv6_address($my_ip)\n  validate_bool(\"fe80::baf6:b1ff:fe19:7507\", $my_ip)\n\nThe following values will fail, causing compilation to abort:\n\n  $some_array = [ true, false, \"garbage string\", \"1.2.3.4\" ]\n  validate_ipv6_address($some_array)\n```\n\n### <a name=\"validate_ipv6_address\"></a>`validate_ipv6_address`\n\nType: Ruby 4.x API\n\nValidate the passed value represents an ipv6_address.\n\n#### `validate_ipv6_address(Any $scope, Any *$args)`\n\nThe validate_ipv6_address function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_legacy\"></a>`validate_legacy`\n\nType: Ruby 4.x API\n\nValidate a value against both the target_type (new) and the previous_validation function (old).\n\n#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`\n\nThe function checks a value against both the target_type (new) and the previous_validation function (old).\n\nReturns: `Any` A boolean value (`true` or `false`) returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `target_type`\n\nData type: `Type`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`\n\nThe validate_legacy function.\n\nReturns: `Any` Legacy validation method\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `type_string`\n\nData type: `String`\n\n\n\n##### `function_name`\n\nData type: `String`\n\n\n\n##### `value`\n\nData type: `Any`\n\n\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 3.x API\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\n#### `validate_numeric()`\n\nThe second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.\nThe third argument is optional and passes a minimum.  (All elements of) the first argument has to be greater or equal to this min.\nIf, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check\nif (all elements of) the first argument are greater or equal to the given minimum.\nIt will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.\n\nFor passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.\n\nReturns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.\n\n### <a name=\"validate_numeric\"></a>`validate_numeric`\n\nType: Ruby 4.x API\n\nValidate the passed value represents a numeric value.\n\n#### `validate_numeric(Any $scope, Any *$args)`\n\nThe validate_numeric function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 3.x API\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n#### `validate_re()`\n\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions.  If none\nof the regular expressions match the string passed in, compilation will\nabort with a parse error.\nIf a third argument is specified, this will be the error message raised and\nseen by the user.\n\n> *Note:*\nCompilation will also abort, if the first argument is not a String. Always use\nquotes to force stringification:\nvalidate_re(\"${::operatingsystemmajrelease}\", '^[57]$')\n\nReturns: `Any` validation of a string against one or more regular expressions.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following strings will validate against the regular expressions:\n\n    validate_re('one', '^one$')\n    validate_re('one', [ '^one', '^two' ])\n\nThe following strings will fail to validate, causing compilation to abort:\n\n    validate_re('one', [ '^two', '^three' ])\n\nA helpful error message can be returned like this:\n\n    validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')\n```\n\n### <a name=\"validate_re\"></a>`validate_re`\n\nType: Ruby 4.x API\n\nPerform validation of a string against one or more regular\nexpressions.\n\n#### `validate_re(Any $scope, Any *$args)`\n\nThe validate_re function.\n\nReturns: `Boolean` `true` or `false` returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\nThe first argument of this function should be a string to\ntest, and the second argument should be a stringified regular expression\n(without the // delimiters) or an array of regular expressions\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 4.x API\n\nValidate that a passed string has length less/equal with the passed value\n\n#### `validate_slength(Any $scope, Any *$args)`\n\nValidate that a passed string has length less/equal with the passed value\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_slength\"></a>`validate_slength`\n\nType: Ruby 3.x API\n\nValidate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.\nAn optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,\nand if arg 2 and arg 3 are not convertable to a number.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n#### `validate_slength()`\n\nThe validate_slength function.\n\nReturns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n  validate_slength(\"discombobulate\",17)\n  validate_slength([\"discombobulate\",\"moo\"],17)\n  validate_slength([\"discombobulate\",\"moo\"],17,3)\n\nThe following valueis will not:\n\n  validate_slength(\"discombobulate\",1)\n  validate_slength([\"discombobulate\",\"thermometer\"],5)\n  validate_slength([\"discombobulate\",\"moo\"],17,10)\n```\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 4.x API\n\nValidate that all passed values are string data structures.\n\n#### `validate_string(Any $scope, Any *$args)`\n\nThe validate_string function.\n\nReturns: `Boolean` `true` or `false`\nA boolean value returned from the called function.\n\n##### `scope`\n\nData type: `Any`\n\nThe main value that will be passed to the method\n\n##### `*args`\n\nData type: `Any`\n\nAny additional values that are to be passed to the method\n\n### <a name=\"validate_string\"></a>`validate_string`\n\nType: Ruby 3.x API\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\n#### Examples\n\n##### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n#### `validate_string()`\n\n> *Note:*\nValidate_string(undef) will not fail in this version of the\nfunctions API (incl. current and future parser). Instead, use:\n```\n  if $var == undef {\n     fail('...')\n    }\n```\n\nReturns: `Any` Validate that all passed values are string data structures. Failed\ncompilation if any value fails this check.\n\n##### Examples\n\n###### **Usage**\n\n```puppet\nThe following values will pass:\n\n    $my_string = \"one two\"\n    validate_string($my_string, 'three')\n\nThe following values will fail, causing compilation to abort:\n\n    validate_string(true)\n    validate_string([ 'some', 'array' ])\n```\n\n### <a name=\"validate_x509_rsa_key_pair\"></a>`validate_x509_rsa_key_pair`\n\nType: Ruby 3.x API\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\n#### `validate_x509_rsa_key_pair()`\n\n```validate_x509_rsa_key_pair($cert, $key)```\n\nReturns: `Any` Fail compilation if any value fails this check.\n\n### <a name=\"values\"></a>`values`\n\nType: Ruby 3.x API\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n#### `values()`\n\n> *Note:*\nFrom Puppet 5.5.0, the compatible function with the same name in Puppet core\nwill be used instead of this function.\n\nReturns: `Any` array of values\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n$hash = {\n  'a' => 1,\n  'b' => 2,\n  'c' => 3,\n}\nvalues($hash)\n\nThis example would return: ```[1,2,3]```\n```\n\n### <a name=\"values_at\"></a>`values_at`\n\nType: Ruby 3.x API\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\n#### Examples\n\n##### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n#### `values_at()`\n\nThe first argument is the array you want to analyze, and the second element can\nbe a combination of:\n\n* A single numeric index\n* A range in the form of 'start-stop' (eg. 4-9)\n* An array combining the above\n\n> *Note:*\nSince Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.\nA negative value is taken to be \"from the end\" of the array:\n\n`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`\n`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`\n`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`\n\nReturns: `Any` an array of values identified by location\n\n##### Examples\n\n###### **Usage**\n\n```puppet\n\nvalues_at(['a','b','c'], 2)\nWould return ['c']\n\nvalues_at(['a','b','c'], [\"0-1\"])\nWould return ['a','b']\n\nvalues_at(['a','b','c','d','e'], [0, \"2-3\"])\nWould return ['a','c','d']\n```\n\n### <a name=\"zip\"></a>`zip`\n\nType: Ruby 3.x API\n\nTakes one element from first array and merges corresponding elements from second array.\n\n#### Examples\n\n##### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n#### `zip()`\n\nThe zip function.\n\nReturns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.\n\n##### Examples\n\n###### \n\n```puppet\nzip(['1','2','3'],['4','5','6'])\nWould result in: [\"1\", \"4\"], [\"2\", \"5\"], [\"3\", \"6\"]\n```\n\n## Data types\n\n### <a name=\"stdlibabsolutepath\"></a>`Stdlib::Absolutepath`\n\nA strict absolutepath type\n\nAlias of\n\n```puppet\nVariant[Stdlib::Windowspath, Stdlib::Unixpath]\n```\n\n### <a name=\"stdlibbase32\"></a>`Stdlib::Base32`\n\nType to match base32 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-z2-7]+={,6}\\z/, /\\A[A-Z2-7]+={,6}\\z/]\n```\n\n### <a name=\"stdlibbase64\"></a>`Stdlib::Base64`\n\nType to match base64 String\n\nAlias of\n\n```puppet\nPattern[/\\A[a-zA-Z0-9\\/\\+]+={,2}\\z/]\n```\n\n### <a name=\"stdlibcompatabsolute_path\"></a>`Stdlib::Compat::Absolute_path`\n\nEmulate the is_absolute_path and validate_absolute_path functions\n\nThe first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?\nslash = '[\\\\\\\\/]'\nname = '[^\\\\\\\\/]+'\n%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\\?#{slash}#{name}))!i,\n\nAlias of\n\n```puppet\nVariant[Pattern[/^(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+))/], Pattern[/^\\//]]\n```\n\n### <a name=\"stdlibcompatarray\"></a>`Stdlib::Compat::Array`\n\nEmulate the is_array and validate_array functions\n\nAlias of\n\n```puppet\nArray[Any]\n```\n\n### <a name=\"stdlibcompatbool\"></a>`Stdlib::Compat::Bool`\n\nEmulate the is_bool and validate_bool functions\n\nAlias of\n\n```puppet\nBoolean\n```\n\n### <a name=\"stdlibcompatfloat\"></a>`Stdlib::Compat::Float`\n\nEmulate the is_float function\nThe regex is what's currently used in is_float\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_float($value,) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Float $value) {\n  validate_float($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Float, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)(?:[eE]-?\\d+)?$/]]\n```\n\n### <a name=\"stdlibcompathash\"></a>`Stdlib::Compat::Hash`\n\nEmulate the is_hash and validate_hash functions\n\nAlias of\n\n```puppet\nHash[Any, Any]\n```\n\n### <a name=\"stdlibcompatinteger\"></a>`Stdlib::Compat::Integer`\n\nEmulate the is_integer and validate_integer functions\nThe regex is what's currently used in is_integer\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_integer($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Integer $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\\d*)|0)$/]]]]\n```\n\n### <a name=\"stdlibcompatip_address\"></a>`Stdlib::Compat::Ip_address`\n\nThe Stdlib::Compat::Ip_address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]\n```\n\n### <a name=\"stdlibcompatipv4\"></a>`Stdlib::Compat::Ipv4`\n\nEmulate the validate_ipv4_address and is_ipv4_address functions\n\nAlias of\n\n```puppet\nPattern[/^((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d)))(\\/((([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))[.]){3}([0-9](?!\\d)|[1-9][0-9](?!\\d)|1[0-9]{2}(?!\\d)|2[0-4][0-9](?!\\d)|25[0-5](?!\\d))|[0-9]+))?$/]\n```\n\n### <a name=\"stdlibcompatipv6\"></a>`Stdlib::Compat::Ipv6`\n\nThe Stdlib::Compat::Ipv6 data type.\n\nAlias of\n\n```puppet\nPattern[/\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/]\n```\n\n### <a name=\"stdlibcompatnumeric\"></a>`Stdlib::Compat::Numeric`\n\nEmulate the is_numeric and validate_numeric functions\nThe regex is what's currently used in is_numeric\nvalidate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.\nFor full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.\nTo keep your development moving forward, you can also add a deprecation warning using the Integer type:\n\n```class example($value) { validate_numeric($value, 10, 0) }```\n\nwould turn into\n\n```\nclass example(Stdlib::Compat::Numeric $value) {\n  validate_numeric($value, 10, 0)\n  assert_type(Integer[0, 10], $value) |$expected, $actual| {\n    warning(\"The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.\")\n  }\n}\n```\n\n> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.\n\nThis allows you to find all places where a consumers of your code call it with unexpected values.\n\nAlias of\n\n```puppet\nVariant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\\d*)|0)(?:\\.\\d+)?(?:[eE]-?\\d+)?$/]]]]\n```\n\n### <a name=\"stdlibcompatstring\"></a>`Stdlib::Compat::String`\n\nEmulate the is_string and validate_string functions\n\nAlias of\n\n```puppet\nOptional[String]\n```\n\n### <a name=\"stdlibdatasize\"></a>`Stdlib::Datasize`\n\nThe Stdlib::Datasize data type.\n\nAlias of\n\n```puppet\nPattern[/^\\d+(?i:[kmgt]b?|b)$/]\n```\n\n### <a name=\"stdlibensurefile\"></a>`Stdlib::Ensure::File`\n\nThe Stdlib::Ensure::File data type.\n\nAlias of\n\n```puppet\nEnum['present', 'file', 'directory', 'link', 'absent']\n```\n\n### <a name=\"stdlibensurefiledirectory\"></a>`Stdlib::Ensure::File::Directory`\n\nThe Stdlib::Ensure::File::Directory data type.\n\nAlias of\n\n```puppet\nEnum['directory', 'absent']\n```\n\n### <a name=\"stdlibensurefilefile\"></a>`Stdlib::Ensure::File::File`\n\nThe Stdlib::Ensure::File::File data type.\n\nAlias of\n\n```puppet\nEnum['file', 'absent']\n```\n\n### <a name=\"stdlibensurefilelink\"></a>`Stdlib::Ensure::File::Link`\n\nThe Stdlib::Ensure::File::Link data type.\n\nAlias of\n\n```puppet\nEnum['link', 'absent']\n```\n\n### <a name=\"stdlibensureservice\"></a>`Stdlib::Ensure::Service`\n\nThe Stdlib::Ensure::Service data type.\n\nAlias of\n\n```puppet\nEnum['stopped', 'running']\n```\n\n### <a name=\"stdlibfilemode\"></a>`Stdlib::Filemode`\n\nSee `man chmod.1` for the regular expression for symbolic mode\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\\z/]\n```\n\n### <a name=\"stdlibfilesource\"></a>`Stdlib::Filesource`\n\nValidate the source parameter on file types\n\nAlias of\n\n```puppet\nVariant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[\n    /\\Afile:\\/\\/\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n    /\\Apuppet:\\/\\/(([\\w-]+\\.?)+)?\\/([^\\n\\/\\0]+(\\/)?)+\\z/,\n  ]]\n```\n\n### <a name=\"stdlibfqdn\"></a>`Stdlib::Fqdn`\n\nThe Stdlib::Fqdn data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibhttpsurl\"></a>`Stdlib::HTTPSUrl`\n\nThe Stdlib::HTTPSUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhttpurl\"></a>`Stdlib::HTTPUrl`\n\nThe Stdlib::HTTPUrl data type.\n\nAlias of\n\n```puppet\nPattern[/(?i:\\Ahttps?:\\/\\/.*\\z)/]\n```\n\n### <a name=\"stdlibhost\"></a>`Stdlib::Host`\n\nThe Stdlib::Host data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]\n```\n\n### <a name=\"stdlibhttpstatus\"></a>`Stdlib::HttpStatus`\n\nThe Stdlib::HttpStatus data type.\n\nAlias of\n\n```puppet\nInteger[100, 599]\n```\n\n### <a name=\"stdlibipaddress\"></a>`Stdlib::IP::Address`\n\nThe Stdlib::IP::Address data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]\n```\n\n### <a name=\"stdlibipaddressnosubnet\"></a>`Stdlib::IP::Address::Nosubnet`\n\nThe Stdlib::IP::Address::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4\"></a>`Stdlib::IP::Address::V4`\n\nThe Stdlib::IP::Address::V4 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv4cidr\"></a>`Stdlib::IP::Address::V4::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv4nosubnet\"></a>`Stdlib::IP::Address::V4::Nosubnet`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6\"></a>`Stdlib::IP::Address::V6`\n\nThe Stdlib::IP::Address::V6 data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]\n```\n\n### <a name=\"stdlibipaddressv6alternative\"></a>`Stdlib::IP::Address::V6::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6cidr\"></a>`Stdlib::IP::Address::V6::CIDR`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6compressed\"></a>`Stdlib::IP::Address::V6::Compressed`\n\nThe Stdlib::IP::Address::V6::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6full\"></a>`Stdlib::IP::Address::V6::Full`\n\nThe Stdlib::IP::Address::V6::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\\z/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnet\"></a>`Stdlib::IP::Address::V6::Nosubnet`\n\nThe Stdlib::IP::Address::V6::Nosubnet data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetalternative\"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`\n\nlint:ignore:140chars\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetcompressed\"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Compressed data type.\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibipaddressv6nosubnetfull\"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`\n\nThe Stdlib::IP::Address::V6::Nosubnet::Full data type.\n\nAlias of\n\n```puppet\nPattern[/\\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\\z/]\n```\n\n### <a name=\"stdlibmac\"></a>`Stdlib::MAC`\n\nA type for a MAC address\n\nAlias of\n\n```puppet\nPattern[/\\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/]\n```\n\n### <a name=\"stdlibobjectstore\"></a>`Stdlib::ObjectStore`\n\nThe Stdlib::ObjectStore data type.\n\nAlias of\n\n```puppet\nVariant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]\n```\n\n### <a name=\"stdlibobjectstoregsuri\"></a>`Stdlib::ObjectStore::GSUri`\n\nThe Stdlib::ObjectStore::GSUri data type.\n\nAlias of\n\n```puppet\nPattern[/\\Ags:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibobjectstores3uri\"></a>`Stdlib::ObjectStore::S3Uri`\n\nThe Stdlib::ObjectStore::S3Uri data type.\n\nAlias of\n\n```puppet\nPattern[/\\As3:\\/\\/.*\\z/]\n```\n\n### <a name=\"stdlibport\"></a>`Stdlib::Port`\n\nThe Stdlib::Port data type.\n\nAlias of\n\n```puppet\nInteger[0, 65535]\n```\n\n### <a name=\"stdlibportdynamic\"></a>`Stdlib::Port::Dynamic`\n\nThe Stdlib::Port::Dynamic data type.\n\nAlias of\n\n```puppet\nInteger[49152, 65535]\n```\n\n### <a name=\"stdlibportephemeral\"></a>`Stdlib::Port::Ephemeral`\n\nThe Stdlib::Port::Ephemeral data type.\n\nAlias of\n\n```puppet\nStdlib::Port::Dynamic\n```\n\n### <a name=\"stdlibportprivileged\"></a>`Stdlib::Port::Privileged`\n\nThe Stdlib::Port::Privileged data type.\n\nAlias of\n\n```puppet\nInteger[1, 1023]\n```\n\n### <a name=\"stdlibportregistered\"></a>`Stdlib::Port::Registered`\n\nThe Stdlib::Port::Registered data type.\n\nAlias of\n\n```puppet\nStdlib::Port::User\n```\n\n### <a name=\"stdlibportunprivileged\"></a>`Stdlib::Port::Unprivileged`\n\nThe Stdlib::Port::Unprivileged data type.\n\nAlias of\n\n```puppet\nInteger[1024, 65535]\n```\n\n### <a name=\"stdlibportuser\"></a>`Stdlib::Port::User`\n\nThe Stdlib::Port::User data type.\n\nAlias of\n\n```puppet\nInteger[1024, 49151]\n```\n\n### <a name=\"stdlibsyslogfacility\"></a>`Stdlib::Syslogfacility`\n\nThe Stdlib::Syslogfacility data type.\n\nAlias of\n\n```puppet\nEnum['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']\n```\n\n### <a name=\"stdlibunixpath\"></a>`Stdlib::Unixpath`\n\nthis regex rejects any path component that does not start with \"/\" or is NUL\n\nAlias of\n\n```puppet\nPattern[/\\A\\/([^\\n\\/\\0]+\\/*)*\\z/]\n```\n\n### <a name=\"stdlibwindowspath\"></a>`Stdlib::Windowspath`\n\nThe Stdlib::Windowspath data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(([a-zA-Z]:[\\\\\\/])|([\\\\\\/][\\\\\\/][^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)|([\\\\\\/][\\\\\\/]\\?[\\\\\\/][^\\\\\\/]+)).*\\z/]\n```\n\n### <a name=\"stdlibyes_no\"></a>`Stdlib::Yes_no`\n\nThe Stdlib::Yes_no data type.\n\nAlias of\n\n```puppet\nPattern[/\\A(?i:(yes|no))\\z/]\n```\n\n",
      "malware_scan": null,
      "tasks": [

      ],
      "plans": [

      ],
      "created_at": "2021-02-02 03:29:49 -0800",
      "updated_at": "2024-04-24 02:08:35 -0700",
      "deleted_at": null,
      "deleted_for": null
    }
  ]
}