# Reference



## Table of Contents

### Classes

* [`stdlib`](#stdlib): This module manages stdlib.
* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources
* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by
the stdlib class, and should not be declared independently.

### Resource types

* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.
* [`file_line`](#file_line): Ensures that a given line is contained within a file.

### Functions

* [`any2array`](#any2array): This converts any object to an array containing that object.
* [`any2bool`](#any2bool): Converts 'anything' to a boolean.
* [`assert_private`](#assert_private): Sets the current class or definition as private.
* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted
* [`basename`](#basename): Strips directory (and optional suffix) from a filename
* [`batch_escape`](#batch_escape): DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.
* [`bool2num`](#bool2num): Converts a boolean to a number.
* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.
* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value
(parameter order doesn't matter).
* [`concat`](#concat): Appends the contents of multiple arrays into array 1.
* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a
specified base, as a string.
* [`count`](#count): Counts the number of elements in array.
* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.
* [`defined_with_params`](#defined_with_params): Takes a resource reference and an optional hash of attributes.
* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a
string, or key from a hash.
* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.
* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression
from an array or key from a hash.
* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.
* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.
* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key.
* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).
* [`difference`](#difference): This function returns the difference between two arrays.
* [`dirname`](#dirname): Returns the dirname of a path.
* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.
* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.
* [`ensure_packages`](#ensure_packages): DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.
* [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a
resource.
* [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a
resource.
* [`fact`](#fact): Digs into the facts hash using dot-notation
* [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.
* [`fqdn_rotate`](#fqdn_rotate): DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.
* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based
on an FQDN string under the DNS namespace
* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current
environment.
* [`getparam`](#getparam): Returns the value of a resource's parameter.
* [`glob`](#glob): Uses same patterns as Dir#glob.
* [`grep`](#grep): This function searches through an array and returns any elements that match
the provided regular expression.
* [`has_interface_with`](#has_interface_with): DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.
* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.
* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.
* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.
* [`intersection`](#intersection): This function returns an array of the intersection of two.
* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.
This is equivalent to the `=~` type checks.
* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a
separator.
* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.
* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data
in the corresponding native data type.
* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data
in the corresponding native data type.
* [`member`](#member): This function determines if a variable is a member of an array.
* [`merge`](#merge): DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.
* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.
* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a
true boolean.
* [`os_version_gte`](#os_version_gte): DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.
* [`parsehocon`](#parsehocon): DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.
* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct
Puppet structure.
* [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7.

This function accepts PSON, a Puppet variant of JSON, as a string and converts
it into the correct Puppet structure
* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct
Puppet structure.
* [`pick`](#pick): This function will return
the first value in a list of values that is not undefined or an empty string.
* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.
* [`powershell_escape`](#powershell_escape): DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.
* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.
* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.
* [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable
on most POSIX systems.
* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as
an array.
* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.
Requires either a single string or an array as an input.
* [`reject`](#reject): This function searches through an array and rejects all elements that match
the provided regular expression.
* [`reverse`](#reverse): Reverses the order of a string or array.
* [`seeded_rand`](#seeded_rand): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.
* [`seeded_rand_string`](#seeded_rand_string): DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.
* [`shell_escape`](#shell_escape): DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.
* [`shell_join`](#shell_join): Builds a command line string from the given array of strings. Each array item is escaped for Bourne shell. All items are then joined together
* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.
* [`shuffle`](#shuffle): @summary  Randomizes the order of a string or array elements.
* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.
* [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line.
* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.
* [`stdlib::deferrable_epp`](#stdlib--deferrable_epp): This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are 
* [`stdlib::end_with`](#stdlib--end_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.
* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value
* [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist.
* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the
last Period).
* [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an
optional seed for repeatable randomness.
* [`stdlib::fqdn_rotate`](#stdlib--fqdn_rotate): Rotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.
* [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function.
* [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values.
* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs
* [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns
the resulting hash.
* [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash
This function will return list of nested Hash values and returns list of values in form of Array
* [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version.
* [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct
Puppet structure
* [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line.
* [`stdlib::seeded_rand`](#stdlib--seeded_rand): Generates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.
* [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed.
* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.
* [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.
* [`stdlib::start_with`](#stdlib--start_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.
* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.
* [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON
* [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON
* [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation
* [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation
* [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML.
* [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML
* [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value.
* [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names.
Fail compilation if any value fails this check.
* [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses.
Fail compilation if any value fails this check.
* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files
* [`str2bool`](#str2bool): This converts a string to a boolean.
* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+
* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for
OS X versions >= 10.7).
* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys
in a hash.
* [`swapcase`](#swapcase): This function will swap the existing case of a string.
* [`time`](#time): This function will return the current time since epoch as an integer.
* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.
* [`to_json`](#to_json): DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.
* [`to_json_pretty`](#to_json_pretty): DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.
* [`to_python`](#to_python): DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.
* [`to_ruby`](#to_ruby): DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.
* [`to_toml`](#to_toml): DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.
* [`to_yaml`](#to_yaml): DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.
* [`type_of`](#type_of): DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.
* [`union`](#union): This function returns a union of two or more arrays.
* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.
* [`uriescape`](#uriescape): Urlencodes a string or array of strings.
Requires either a single string or an array as an input.
* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens
* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.
* [`validate_domain_name`](#validate_domain_name): DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.
* [`validate_email_address`](#validate_email_address): DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.
* [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new).
* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using
OpenSSL.
* [`values_at`](#values_at): Finds value inside an array based on location.
* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.

### Data types

* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type
* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String
* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String
* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function
* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data
* [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name
* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address
* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file
* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a "directory" file resource
* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a "file" file resource
* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a "link" file resource
* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package
* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource
* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode
* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types
* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name
* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL
* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL
* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)
* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs
* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110
* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code
* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address
* [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet
* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet
* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address
* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars
* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars
* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address
* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address
* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address
* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet
* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet
* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet
* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address
* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore
* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI
* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI
* [`Stdlib::Port`](#Stdlib--Port): Validate a port number
* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number
* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number
* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number
* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number
* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number
* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user
* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility
* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path
* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path
* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value

## Classes

### `stdlib`

Most of stdlib's features are automatically loaded by Puppet, but this class should be
declared in order to use the standardized run stages.

Declares all other classes in the stdlib module. Currently, this consists
of stdlib::stages and stdlib::manage.

### `stdlib::manage`

Sometimes your systems require a single simple resource.
It can feel unnecessary to create a module for a single
resource.  There are a number of possible patterns to
generate trivial resource definitions.  This is an attempt
to create a single clear method for uncomplicated resources.
There is __limited__ support for `before`, `require`, `notify`,
and `subscribe`.

#### Examples

##### 

```puppet
class { 'stdlib::manage':
    'create_resources' => {
      'file' => {
        '/etc/motd.d/hello' => {
          'content' => 'I say Hi',
          'notify' => 'Service[sshd]',
        }
      },
      'package' => {
        'example' => {
          'ensure' => 'installed',
          'subscribe' => ['Service[sshd]', 'Exec[something]'],
        }
      }
    }
```

##### 

```puppet
stdlib::manage::create_resources:
  file:
    '/etc/motd.d/hello':
      content: I say Hi
      notify: 'Service[sshd]'
  package:
    example:
      ensure: installed
      subscribe:
        - 'Service[sshd]'
        - 'Exec[something]'
```

#### Parameters

The following parameters are available in the `stdlib::manage` class:

* [`create_resources`](#-stdlib--manage--create_resources)

##### `create_resources`

Data type: `Hash[String, Hash]`

A hash of resources to create
NOTE: functions, such as `template` or `epp`, are not evaluated.

Default value: `{}`

### `stdlib::stages`

Declares various run-stages for deploying infrastructure,
language runtimes, and application layers.

The high level stages are (in order):
 * setup
 * main
 * runtime
 * setup_infra
 * deploy_infra
 * setup_app
 * deploy_app
 * deploy

#### Examples

##### 

```puppet
node default {
  include ::stdlib
  class { java: stage => 'runtime' }
}
```

## Resource types

### `anchor`

> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.

In Puppet 2.6, when a class declares another class, the resources in the
interior class are not contained by the exterior class. This interacts badly
with the pattern of composing complex modules from smaller classes, as it
makes it impossible for end users to specify order relationships between the
exterior class and other modules.

The anchor type lets you work around this. By sandwiching any interior
classes between two no-op resources that _are_ contained by the exterior
class, you can ensure that all resources in the module are contained.

```
class ntp {
  # These classes will have the correct order relationship with each
  # other. However, without anchors, they won't have any order
  # relationship to Class['ntp'].
  class { 'ntp::package': }
  -> class { 'ntp::config': }
  -> class { 'ntp::service': }

  # These two resources "anchor" the composed classes within the ntp
  # class.
  anchor { 'ntp::begin': } -> Class['ntp::package']
  Class['ntp::service']    -> anchor { 'ntp::end': }
}
```

This allows the end user of the ntp module to establish require and before
relationships with Class['ntp']:

```
class { 'ntp': } -> class { 'mcollective': }
class { 'mcollective': } -> class { 'ntp': }
```

#### Parameters

The following parameters are available in the `anchor` type.

* [`name`](#-anchor--name)

##### `name`

namevar

The name of the anchor resource.

### `file_line`

The implementation matches the full line, including whitespace at the
beginning and end.  If the line is not contained in the given file, Puppet
will append the line to the end of the file to ensure the desired state.
Multiple resources may be declared to manage multiple lines in the same file.

* Ensure Example
```
file_line { 'sudo_rule':
  path => '/etc/sudoers',
  line => '%sudo ALL=(ALL) ALL',
}

file_line { 'sudo_rule_nopw':
  path => '/etc/sudoers',
  line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}
```
In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.

* Match Example

```
file_line { 'bashrc_proxy':
  ensure => present,
  path   => '/etc/bashrc',
  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
  match  => '^export HTTP_PROXY=',
}
```

In this code example match will look for a line beginning with export
followed by HTTP_PROXY and replace it with the value in line.

* Examples With `ensure => absent`:

This type has two behaviors when `ensure => absent` is set.

One possibility is to set `match => ...` and `match_for_absence => true`,
as in the following example:

```
file_line { 'bashrc_proxy':
  ensure            => absent,
  path              => '/etc/bashrc',
  match             => '^export HTTP_PROXY=',
  match_for_absence => true,
}
```

In this code example match will look for a line beginning with export
followed by HTTP_PROXY and delete it.  If multiple lines match, an
error will be raised unless the `multiple => true` parameter is set.

Note that the `line => ...` parameter would be accepted BUT IGNORED in
the above example.

The second way of using `ensure => absent` is to specify a `line => ...`,
and no match:

```
file_line { 'bashrc_proxy':
  ensure => absent,
  path   => '/etc/bashrc',
  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
}
```

> *Note:*
When ensuring lines are absent this way, the default behavior
this time is to always remove all lines matching, and this behavior
can't be disabled.

* Encoding example:

```
file_line { "XScreenSaver":
  ensure   => present,
  path     => '/root/XScreenSaver',
  line     => "*lock: 10:00:00",
  match    => '^*lock:',
  encoding => "iso-8859-1",
}
```

Files with special characters that are not valid UTF-8 will give the
error message "invalid byte sequence in UTF-8".  In this case, determine
the correct file encoding and specify the correct encoding using the
encoding attribute, the value of which needs to be a valid Ruby character
encoding.

**Autorequires:** If Puppet is managing the file that will contain the line
being managed, the file_line resource will autorequire that file.

#### Properties

The following properties are available in the `file_line` type.

##### `ensure`

Valid values: `present`, `absent`

Manage the state of this type.

Default value: `present`

##### `line`

The line to be appended to the file or used to replace matches found by the match attribute.

#### Parameters

The following parameters are available in the `file_line` type.

* [`after`](#-file_line--after)
* [`append_on_no_match`](#-file_line--append_on_no_match)
* [`encoding`](#-file_line--encoding)
* [`match`](#-file_line--match)
* [`match_for_absence`](#-file_line--match_for_absence)
* [`multiple`](#-file_line--multiple)
* [`name`](#-file_line--name)
* [`path`](#-file_line--path)
* [`provider`](#-file_line--provider)
* [`replace`](#-file_line--replace)
* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)

##### `after`

An optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)
This is also takes a regex.

##### `append_on_no_match`

Valid values: `true`, `false`

If true, append line if match is not found. If false, do not append line if a match is not found

Default value: `true`

##### `encoding`

For files that are not UTF-8 encoded, specify encoding such as iso-8859-1

Default value: `UTF-8`

##### `match`

An optional ruby regular expression to run against existing lines in the file.
If a match is found, we replace that line rather than adding a new line.
A regex comparison is performed against the line value and if it does not
match an exception will be raised.

##### `match_for_absence`

Valid values: `true`, `false`

An optional value to determine if match should be applied when ensure => absent.
If set to true and match is set, the line that matches match will be deleted.
If set to false (the default), match is ignored when ensure => absent.
When `ensure => present`, match_for_absence is ignored.

Default value: `false`

##### `multiple`

Valid values: `true`, `false`

An optional value to determine if match can change multiple lines.
If set to false, an exception will be raised if more than one line matches

##### `name`

namevar

An arbitrary name used as the identity of the resource.

##### `path`

The file Puppet will ensure contains the line specified by the line parameter.

##### `provider`

The specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually
discover the appropriate provider for your platform.

##### `replace`

Valid values: `true`, `false`

If true, replace line that matches. If false, do not write line if a match is found

Default value: `true`

##### `replace_all_matches_not_matching_line`

Valid values: `true`, `false`

Configures the behavior of replacing all lines in a file which match the `match` parameter regular expression,
regardless of whether the specified line is already present in the file.

Default value: `false`

## Functions

### `any2array`

Type: Ruby 3.x API

Empty argument lists are converted to an empty array. Arrays are left
untouched. Hashes are converted to arrays of alternating keys and values.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)
  function is used to create a new Array..

  ```
  $hsh = {'key' => 42, 'another-key' => 100}
  notice(Array($hsh))
  ```

Would notice `[['key', 42], ['another-key', 100]]`

The Array data type also has a special mode to "create an array if not already an array"

  ```
  notice(Array({'key' => 42, 'another-key' => 100}, true))
  ```

Would notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being
transformed into an array.

#### `any2array()`

Empty argument lists are converted to an empty array. Arrays are left
untouched. Hashes are converted to arrays of alternating keys and values.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)
  function is used to create a new Array..

  ```
  $hsh = {'key' => 42, 'another-key' => 100}
  notice(Array($hsh))
  ```

Would notice `[['key', 42], ['another-key', 100]]`

The Array data type also has a special mode to "create an array if not already an array"

  ```
  notice(Array({'key' => 42, 'another-key' => 100}, true))
  ```

Would notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being
transformed into an array.

Returns: `Array` The new array containing the given object

### `any2bool`

Type: Ruby 3.x API

In practise it does the following:
* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true
* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false
* Booleans will just return their original value
* Number (or a string representation of a number) > 0 will return true, otherwise false
* undef will return false
* Anything else will return true

Also see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function.

#### `any2bool()`

In practise it does the following:
* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true
* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false
* Booleans will just return their original value
* Number (or a string representation of a number) > 0 will return true, otherwise false
* undef will return false
* Anything else will return true

Also see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function.

Returns: `Boolean` The boolean value of the object that was given

### `assert_private`

Type: Ruby 3.x API

Calling the class or definition from outside the current module will fail.

#### `assert_private()`

Calling the class or definition from outside the current module will fail.

Returns: `Any` set the current class or definition as private.

### `base64`

Type: Ruby 3.x API

> **Note:*
    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.
    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`
    function for reading a file with binary (non UTF-8) content.

#### Examples

##### Example usage

```puppet

Encode and decode a string

  $encodestring = base64('encode', 'thestring')
  $decodestring = base64('decode', 'dGhlc3RyaW5n')

Explicitly define encode/decode method: default, strict, urlsafe

  $method = 'default'
  $encodestring = base64('encode', 'thestring', $method)
  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)

Encode a string as if it was binary

 $encodestring = String(Binary('thestring', '%s'))

Decode a Binary assuming it is an UTF-8 String

 $decodestring = String(Binary("dGhlc3RyaW5n"), "%s")
```

#### `base64()`

> **Note:*
    Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.
    See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`
    function for reading a file with binary (non UTF-8) content.

Returns: `String` The encoded/decoded

##### Examples

###### Example usage

```puppet

Encode and decode a string

  $encodestring = base64('encode', 'thestring')
  $decodestring = base64('decode', 'dGhlc3RyaW5n')

Explicitly define encode/decode method: default, strict, urlsafe

  $method = 'default'
  $encodestring = base64('encode', 'thestring', $method)
  $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)

Encode a string as if it was binary

 $encodestring = String(Binary('thestring', '%s'))

Decode a Binary assuming it is an UTF-8 String

 $decodestring = String(Binary("dGhlc3RyaW5n"), "%s")
```

### `basename`

Type: Ruby 3.x API

Strips directory (and optional suffix) from a filename

#### `basename()`

The basename function.

Returns: `String` The stripped filename

### `batch_escape`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead.

#### `batch_escape(Any *$args)`

The batch_escape function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `bool2num`

Type: Ruby 3.x API

Converts the values:
  ```
  false, f, 0, n, and no to 0
  true, t, 1, y, and yes to 1
  ```
Requires a single boolean or string as an input.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),
  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and
  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)
  function are used to convert to numeric values.
  ```
  notice(Integer(false)) # Notices 0
  notice(Float(true))    # Notices 1.0
  ```

#### `bool2num()`

Converts the values:
  ```
  false, f, 0, n, and no to 0
  true, t, 1, y, and yes to 1
  ```
Requires a single boolean or string as an input.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),
  [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and
  [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)
  function are used to convert to numeric values.
  ```
  notice(Integer(false)) # Notices 0
  notice(Float(true))    # Notices 1.0
  ```

Returns: `Integer` The converted value as a number

### `bool2str`

Type: Ruby 3.x API

The optional second and third arguments represent what true and false will be
converted to respectively. If only one argument is given, it will be
converted from a boolean to a string containing 'true' or 'false'.

**Examples of usage**

  ```
    bool2str(true)                    => 'true'
    bool2str(true, 'yes', 'no')       => 'yes'
    bool2str(false, 't', 'f')         => 'f'
  ```

Requires a single boolean as an input.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)
  function is used to convert to String with many different format options.

  ```
    notice(String(false))         # Notices 'false'
    notice(String(true))          # Notices 'true'
    notice(String(false, '%y'))   # Notices 'yes'
    notice(String(true, '%y'))    # Notices 'no'
  ```

#### `bool2str()`

The optional second and third arguments represent what true and false will be
converted to respectively. If only one argument is given, it will be
converted from a boolean to a string containing 'true' or 'false'.

**Examples of usage**

  ```
    bool2str(true)                    => 'true'
    bool2str(true, 'yes', 'no')       => 'yes'
    bool2str(false, 't', 'f')         => 'f'
  ```

Requires a single boolean as an input.

> *Note:*
  since Puppet 5.0.0 it is possible to create new data types for almost any
  datatype using the type system and the built-in
  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)
  function is used to convert to String with many different format options.

  ```
    notice(String(false))         # Notices 'false'
    notice(String(true))          # Notices 'true'
    notice(String(false, '%y'))   # Notices 'yes'
    notice(String(true, '%y'))    # Notices 'no'
  ```

Returns: `Any` The converted value to string of the given Boolean

### `clamp`

Type: Ruby 3.x API

Strings are converted and compared numerically. Arrays of values are flattened
into a list for further handling.

> *Note:*
  From Puppet 6.0.0 this can be done with only core Puppet like this:
  `[$minval, $maxval, $value_to_clamp].sort[1]`

#### Examples

##### Example usage

```puppet

clamp('24', [575, 187])` returns 187.
clamp(16, 88, 661)` returns 88.
clamp([4, 3, '99'])` returns 4.
```

#### `clamp()`

Strings are converted and compared numerically. Arrays of values are flattened
into a list for further handling.

> *Note:*
  From Puppet 6.0.0 this can be done with only core Puppet like this:
  `[$minval, $maxval, $value_to_clamp].sort[1]`

Returns: `Array[Integer]` The sorted Array

##### Examples

###### Example usage

```puppet

clamp('24', [575, 187])` returns 187.
clamp(16, 88, 661)` returns 88.
clamp([4, 3, '99'])` returns 4.
```

### `concat`

Type: Ruby 3.x API

> *Note:*
  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and
  merge of hashes, and the `<<`` operator for appending:

`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`
`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`
`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`

#### Examples

##### Example usage

```puppet

concat(['1','2','3'],'4') returns ['1','2','3','4']
concat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']
```

#### `concat()`

> *Note:*
  Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and
  merge of hashes, and the `<<`` operator for appending:

`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`
`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`
`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`

Returns: `Array` The single concatenated array

##### Examples

###### Example usage

```puppet

concat(['1','2','3'],'4') returns ['1','2','3','4']
concat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']
```

### `convert_base`

Type: Ruby 3.x API

convert_base(5, 2)` results in: `'101'`
convert_base('254', '16')` results in: `'fe'`

> *Note:*
  Since Puppet 4.5.0 this can be done with the built-in
  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)
  function and its many formatting options:

  `$binary_repr = String(5, '%b')` return `"101"`
  `$hex_repr = String(254, "%x")`  return `"fe"`
  `$hex_repr = String(254, "%#x")` return `"0xfe"`

  @return [String] The converted value as a S

#### Examples

##### Example usage

```puppet

```

#### `convert_base()`

convert_base(5, 2)` results in: `'101'`
convert_base('254', '16')` results in: `'fe'`

> *Note:*
  Since Puppet 4.5.0 this can be done with the built-in
  [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)
  function and its many formatting options:

  `$binary_repr = String(5, '%b')` return `"101"`
  `$hex_repr = String(254, "%x")`  return `"fe"`
  `$hex_repr = String(254, "%#x")` return `"0xfe"`

  @return [String] The converted value as a S

Returns: `Any` converted value as a string

##### Examples

###### Example usage

```puppet

```

### `count`

Type: Ruby 3.x API

Takes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.
If called with only an array, it counts the number of elements that are not nil/undef/empty-string.

> *Note:*
  equality is tested with a Ruby method and it is therefore subject to what Ruby considers
  to be equal. For strings this means that equality is case sensitive.

In Puppet core, counting can be done in general by using a combination of the core functions
filter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).

Example below shows counting values that are not undef.

  ```notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)```

Would notice the value 2.

#### `count()`

Takes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.
If called with only an array, it counts the number of elements that are not nil/undef/empty-string.

> *Note:*
  equality is tested with a Ruby method and it is therefore subject to what Ruby considers
  to be equal. For strings this means that equality is case sensitive.

In Puppet core, counting can be done in general by using a combination of the core functions
filter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).

Example below shows counting values that are not undef.

  ```notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)```

Would notice the value 2.

Returns: `Integer` The amount of elements counted within the array

### <a name="deep_merge"></a>`deep_merge`

Type: Ruby 3.x API

Recursively merges two or more hashes together and returns the resulting hash.

#### Examples

##### Example usage

```puppet

$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }
$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }
$merged_hash = deep_merge($hash1, $hash2)

The resulting hash is equivalent to:

$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }

When there is a duplicate key that is a hash, they are recursively merged.
When there is a duplicate key that is not a hash, the key in the rightmost hash will "win."
```

#### `deep_merge()`

The deep_merge function.

Returns: `Hash` The merged

##### Examples

###### Example usage

```puppet

$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }
$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }
$merged_hash = deep_merge($hash1, $hash2)

The resulting hash is equivalent to:

$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }

When there is a duplicate key that is a hash, they are recursively merged.
When there is a duplicate key that is not a hash, the key in the rightmost hash will "win."
```

### `defined_with_params`

Type: Ruby 3.x API

Returns `true` if a resource with the specified attributes has already been added
to the catalog, and `false` otherwise.

  ```
  user { 'dan':
    ensure => present,
  }

  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {
    user { 'dan': ensure => present, }
  }
  ```

#### `defined_with_params()`

Returns `true` if a resource with the specified attributes has already been added
to the catalog, and `false` otherwise.

  ```
  user { 'dan':
    ensure => present,
  }

  if ! defined_with_params(User[dan], {'ensure' => 'present' }) {
    user { 'dan': ensure => present, }
  }
  ```

Returns: `Boolean` returns `true` or `false`

### `delete`

Type: Ruby 3.x API

> *Note:*
From Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash
`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`
>
A global delete from a string can be performed with the
[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:
`'abracadabra'.regsubst(/bra/, '', 'G')`

In general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)
function can filter out entries from arrays and hashes based on keys and/or values.

#### Examples

##### Example usage

```puppet

delete(['a','b','c','b'], 'b')
Would return: ['a','c']

delete({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}

delete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])
Would return: {'a'=>1}

delete('abracadabra', 'bra')
Would return: 'acada'

['a', 'b', 'c', 'b'] - 'b'
Would return: ['a', 'c']

{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])
Would return: {'a' => '1'}

'abracadabra'.regsubst(/bra/, '', 'G')
Would return: 'acada'
```

#### `delete()`

> *Note:*
From Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash
`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`
>
A global delete from a string can be performed with the
[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:
`'abracadabra'.regsubst(/bra/, '', 'G')`

In general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)
function can filter out entries from arrays and hashes based on keys and/or values.

Returns: `String` The filtered String, if one was given.

##### Examples

###### Example usage

```puppet

delete(['a','b','c','b'], 'b')
Would return: ['a','c']

delete({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}

delete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])
Would return: {'a'=>1}

delete('abracadabra', 'bra')
Would return: 'acada'

['a', 'b', 'c', 'b'] - 'b'
Would return: ['a', 'c']

{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])
Would return: {'a' => '1'}

'abracadabra'.regsubst(/bra/, '', 'G')
Would return: 'acada'
```

### `delete_at`

Type: Ruby 3.x API

For example
    ```delete_at(['a','b','c'], 1)```

Would return: `['a','c']`

> *Note:*
  Since Puppet 4 this can be done in general with the built-in
  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:

  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```

Or if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:
  ```
  $array[0, -1] # the same as all the values
  $array[2, -1] # all but the first 2 elements
  $array[0, -3] # all but the last 2 elements
  $array[1, -2] # all but the first and last element
  ```

#### `delete_at()`

For example
    ```delete_at(['a','b','c'], 1)```

Would return: `['a','c']`

> *Note:*
  Since Puppet 4 this can be done in general with the built-in
  [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:

  ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```

Or if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:
  ```
  $array[0, -1] # the same as all the values
  $array[2, -1] # all but the first 2 elements
  $array[0, -3] # all but the last 2 elements
  $array[1, -2] # all but the first and last element
  ```

Returns: `Array` The given array, now missing the tar

### <a name="delete_regex"></a>`delete_regex`

Type: Ruby 3.x API

Multiple regular expressions are assumed to be matched as an OR.

> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ }
Would return: ['aaa', 'aca']

#### Examples

##### Example usage

```puppet

delete_regex(['a','b','c','b'], 'b')
Would return: ['a','c']

delete_regex(['a','b','c','b'], ['b', 'c'])
Would return: ['a']

delete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}

delete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')
Would return: {'b'=>2,'c'=>3}
```

#### `delete_regex()`

Multiple regular expressions are assumed to be matched as an OR.

> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ }
Would return: ['aaa', 'aca']

Returns: `Array` The given array now missing all targeted values.

##### Examples

###### Example usage

```puppet

delete_regex(['a','b','c','b'], 'b')
Would return: ['a','c']

delete_regex(['a','b','c','b'], ['b', 'c'])
Would return: ['a']

delete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}

delete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')
Would return: {'b'=>2,'c'=>3}
```

### `delete_undef_values`

Type: Ruby 3.x API

> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val =~ NotUndef }
$hash.filter |$key, $val| { $val =~ NotUndef }

#### Examples

##### Example usage

```puppet

$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})
Would return: {a => 'A', b => '', d => false}

While:
$array = delete_undef_values(['A','',undef,false])
Would return: ['A','',false]
```

#### `delete_undef_values()`

> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val =~ NotUndef }
$hash.filter |$key, $val| { $val =~ NotUndef }

Returns: `Array` The given array now issing of undefined values.

##### Examples

###### Example usage

```puppet

$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})
Would return: {a => 'A', b => '', d => false}

While:
$array = delete_undef_values(['A','',undef,false])
Would return: ['A','',false]
```

### `delete_values`

Type: Ruby 3.x API

> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the
built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val != 'B' }
$hash.filter |$key, $val| { $val != 'B' }

#### Examples

##### Example usage

```puppet

delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')
Would return: {'a'=>'A','c'=>'C','B'=>'D'}
```

#### `delete_values()`

> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the
built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val != 'B' }
$hash.filter |$key, $val| { $val != 'B' }

Returns: `Hash` The given hash now missing all instances of the targeted value

##### Examples

###### Example usage

```puppet

delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')
Would return: {'a'=>'A','c'=>'C','B'=>'D'}
```

### `deprecation`

Type: Ruby 4.x API

Function to print deprecation warnings, Logs a warning once for a given key.

#### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)`

The deprecation function.

Returns: `Any`

##### `key`

Data type: `String`

The uniqueness key.  This function logs once for any given key.

##### `message`

Data type: `String`

Is the message text including any positional information that is formatted by the user/caller of the function.

##### `use_strict_setting`

Data type: `Optional[Boolean]`

When `true`, (the default), the function is affected by the puppet setting 'strict', which can be set to :error
(outputs as an error message), :off (no message / error is displayed) and :warning
(default, outputs a warning).

### `deprecation`

Type: Ruby 3.x API

The uniqueness key - can appear once. The msg is the message text including any positional
information that is formatted by the user/caller of the method.).

#### `deprecation()`

The uniqueness key - can appear once. The msg is the message text including any positional
information that is formatted by the user/caller of the method.).

Returns: `String` return deprecation warnings

### `difference`

Type: Ruby 3.x API

The returned array is a copy of the original array, removing any items that
also appear in the second array.

> *Note:*
Since Puppet 4 the minus (-) operator in the Puppet language does the same thing:
['a', 'b', 'c'] - ['b', 'c', 'd']
Would return: `['a']`

#### Examples

##### Example usage

```puppet

difference(["a","b","c"],["b","c","d"])
Would return: `["a"]`
```

#### `difference()`

The returned array is a copy of the original array, removing any items that
also appear in the second array.

> *Note:*
Since Puppet 4 the minus (-) operator in the Puppet language does the same thing:
['a', 'b', 'c'] - ['b', 'c', 'd']
Would return: `['a']`

Returns: `Array` The difference between the two given arrays

##### Examples

###### Example usage

```puppet

difference(["a","b","c"],["b","c","d"])
Would return: `["a"]`
```

### `dirname`

Type: Ruby 3.x API

Returns the dirname of a path.

#### `dirname()`

The dirname function.

Returns: `String` the given path's dirname

### `dos2unix`

Type: Ruby 3.x API

Takes a single string argument.

#### `dos2unix()`

Takes a single string argument.

Returns: `Any` The retrieved version

### `enclose_ipv6`

Type: Ruby 3.x API

Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.

#### `enclose_ipv6()`

The enclose_ipv6 function.

Returns: `Any` encloses the ipv6 addresses with square brackets.

### `ensure_packages`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead.

#### `ensure_packages(Any *$args)`

The ensure_packages function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `ensure_resource`

Type: Ruby 3.x API

user { 'dan':
  ensure => present,
}

#### Examples

##### Example usage

```puppet

Creates the resource if it does not already exist:

  ensure_resource('user', 'dan', {'ensure' => 'present' })

If the resource already exists but does not match the specified parameters,
this function will attempt to recreate the resource leading to a duplicate
resource definition error.

An array of resources can also be passed in and each will be created with
the type and parameters specified if it doesn't already exist.

  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})
```

#### `ensure_resource()`

user { 'dan':
  ensure => present,
}

Returns: `Any` created or recreated the passed resource with the passed type and attributes

##### Examples

###### Example usage

```puppet

Creates the resource if it does not already exist:

  ensure_resource('user', 'dan', {'ensure' => 'present' })

If the resource already exists but does not match the specified parameters,
this function will attempt to recreate the resource leading to a duplicate
resource definition error.

An array of resources can also be passed in and each will be created with
the type and parameters specified if it doesn't already exist.

  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})
```

### `ensure_resources`

Type: Ruby 3.x API

An hash of resources should be passed in and each will be created with
  the type and parameters specified if it doesn't already exist.

  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})

  From Hiera Backend:

  userlist:
    dan:
      gid: 'mygroup'
   uid: '600'
    alex:
   gid: 'mygroup'

  Call:
  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})

#### Examples

##### Example usage

```puppet

user { 'dan':
  gid => 'mygroup',
  ensure => present,
}
```

#### `ensure_resources()`

An hash of resources should be passed in and each will be created with
  the type and parameters specified if it doesn't already exist.

  ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})

  From Hiera Backend:

  userlist:
    dan:
      gid: 'mygroup'
   uid: '600'
    alex:
   gid: 'mygroup'

  Call:
  ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})

Returns: `Any` created resources with the passed type and attributes

##### Examples

###### Example usage

```puppet

user { 'dan':
  gid => 'mygroup',
  ensure => present,
}
```

### `fact`

Type: Ruby 4.x API

Supports the use of dot-notation for referring to structured facts. If a fact requested
does not exist, returns Undef.

#### Examples

##### Example usage:

```puppet
fact('osfamily')
fact('os.architecture')
```

##### Array indexing:

```puppet
fact('mountpoints."/dev".options.1')
```

##### Fact containing a "." in the name:

```puppet
fact('vmware."VRA.version"')
```

#### `fact(String $fact_name)`

Supports the use of dot-notation for referring to structured facts. If a fact requested
does not exist, returns Undef.

Returns: `Any` All information retrieved on the given fact_name

##### Examples

###### Example usage:

```puppet
fact('osfamily')
fact('os.architecture')
```

###### Array indexing:

```puppet
fact('mountpoints."/dev".options.1')
```

###### Fact containing a "." in the name:

```puppet
fact('vmware."VRA.version"')
```

##### `fact_name`

Data type: `String`

The name of the fact to check

### `fqdn_rand_string`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead.

#### `fqdn_rand_string(Any *$args)`

The fqdn_rand_string function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `fqdn_rotate`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead.

#### `fqdn_rotate(Any *$args)`

The fqdn_rotate function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `fqdn_uuid`

Type: Ruby 3.x API

Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based
on an FQDN string under the DNS namespace

#### Examples

##### Example Usage:

```puppet
fqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'
fqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a
```

#### `fqdn_uuid()`

The fqdn_uuid function.

Returns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID

##### Examples

###### Example Usage:

```puppet
fqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'
fqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a
```

### `get_module_path`

Type: Ruby 3.x API

> *Note:*
  that since Puppet 5.4.0 the  built-in
  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)
  function in Puppet does the same thing and will return the path to the first found module
  if given multiple values or an array.

#### Examples

##### Example Usage:

```puppet
$module_path = get_module_path('stdlib')
```

#### `get_module_path()`

> *Note:*
  that since Puppet 5.4.0 the  built-in
  [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)
  function in Puppet does the same thing and will return the path to the first found module
  if given multiple values or an array.

Returns: `Any` Returns the absolute path of the specified module for the current
environment.

##### Examples

###### Example Usage:

```puppet
$module_path = get_module_path('stdlib')
```

### `getparam`

Type: Ruby 3.x API

Takes a resource reference and name of the parameter and
returns value of resource's parameter. Note that user defined
resource types are evaluated lazily.

Would notice: 'the value we are getting in this example'

> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type
and the [ ] operator. The example below is equivalent to a call to getparam():
  ```Example_resource['example_resource_instance']['param']``

#### Examples

##### Example Usage:

```puppet

# define a resource type with a parameter
define example_resource($param) {
}

# declare an instance of that type
example_resource { "example_resource_instance":
    param => "'the value we are getting in this example''"
}

# Because of order of evaluation, a second definition is needed
# that will be evaluated after the first resource has been declared
#
define example_get_param {
  # This will notice the value of the parameter
  notice(getparam(Example_resource["example_resource_instance"], "param"))
}

# Declare an instance of the second resource type - this will call notice
example_get_param { 'show_notify': }
```

#### `getparam()`

Takes a resource reference and name of the parameter and
returns value of resource's parameter. Note that user defined
resource types are evaluated lazily.

Would notice: 'the value we are getting in this example'

> **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type
and the [ ] operator. The example below is equivalent to a call to getparam():
  ```Example_resource['example_resource_instance']['param']``

Returns: `Any` value of a resource's parameter.

##### Examples

###### Example Usage:

```puppet

# define a resource type with a parameter
define example_resource($param) {
}

# declare an instance of that type
example_resource { "example_resource_instance":
    param => "'the value we are getting in this example''"
}

# Because of order of evaluation, a second definition is needed
# that will be evaluated after the first resource has been declared
#
define example_get_param {
  # This will notice the value of the parameter
  notice(getparam(Example_resource["example_resource_instance"], "param"))
}

# Declare an instance of the second resource type - this will call notice
example_get_param { 'show_notify': }
```

### `glob`

Type: Ruby 3.x API

Uses same patterns as Dir#glob.

#### Examples

##### Example Usage:

```puppet
$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])
```

#### `glob()`

The glob function.

Returns: `Any` Returns an Array of file entries of a directory or an Array of directories.

##### Examples

###### Example Usage:

```puppet
$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])
```

### `grep`

Type: Ruby 3.x API

> **Note:** that since Puppet 4.0.0, the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does
the "same" - as any logic can be used to filter, as opposed to just regular expressions:
```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```

#### Examples

##### Example Usage:

```puppet
grep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']
```

#### `grep()`

> **Note:** that since Puppet 4.0.0, the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does
the "same" - as any logic can be used to filter, as opposed to just regular expressions:
```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```

Returns: `Any` array of elements that match the provided regular expression.

##### Examples

###### Example Usage:

```puppet
grep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']
```

### `has_interface_with`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead.

#### `has_interface_with(Any *$args)`

The has_interface_with function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `has_interface_with`

Type: Ruby 3.x API

Valid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.

#### Examples

##### **Usage**

```puppet
has_interface_with("macaddress", "x:x:x:x:x:x") # Returns `false`
has_interface_with("ipaddress", "127.0.0.1") # Returns `true`
```

##### If no "kind" is given, then the presence of the interface is checked:

```puppet
has_interface_with("lo") # Returns `true`
```

#### `has_interface_with()`

Valid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.

Returns: `Any` boolean values `true` or `false`

##### Examples

###### **Usage**

```puppet
has_interface_with("macaddress", "x:x:x:x:x:x") # Returns `false`
has_interface_with("ipaddress", "127.0.0.1") # Returns `true`
```

###### If no "kind" is given, then the presence of the interface is checked:

```puppet
has_interface_with("lo") # Returns `true`
```

### `has_ip_address`

Type: Ruby 3.x API

This function iterates through the 'interfaces' fact and checks the
'ipaddress_IFACE' facts, performing a simple string comparison.

#### `has_ip_address()`

This function iterates through the 'interfaces' fact and checks the
'ipaddress_IFACE' facts, performing a simple string comparison.

Returns: `Boolean` `true` or `false`

### `has_ip_network`

Type: Ruby 3.x API

This function iterates through the 'interfaces' fact and checks the
'network_IFACE' facts, performing a simple string comparision.

#### `has_ip_network()`

This function iterates through the 'interfaces' fact and checks the
'network_IFACE' facts, performing a simple string comparision.

Returns: `Any` Boolean value, `true` if the client has an IP address within the requested network.

### `intersection`

Type: Ruby 3.x API

This function returns an array of the intersection of two.

#### Examples

##### Example Usage:

```puppet
intersection(["a","b","c"],["b","c","d"])  # returns ["b","c"]
intersection(["a","b","c"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)
```

#### `intersection()`

The intersection function.

Returns: `Any` an array of the intersection of two.

##### Examples

###### Example Usage:

```puppet
intersection(["a","b","c"],["b","c","d"])  # returns ["b","c"]
intersection(["a","b","c"],[1,2,3,4])      # returns [] (true, when evaluated as a Boolean)
```

### `is_a`

Type: Ruby 4.x API

See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.

#### Examples

##### Example Usage:

```puppet
# check a data type
  foo = 3
  $bar = [1,2,3]
  $baz = 'A string!'

  if $foo.is_a(Integer) {
    notify  { 'foo!': }
  }
  if $bar.is_a(Array) {
    notify { 'bar!': }
  }
  if $baz.is_a(String) {
    notify { 'baz!': }
  }
```

#### `is_a(Any $value, Type $type)`

See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.

Returns: `Boolean` Return's `true` or `false`.

##### Examples

###### Example Usage:

```puppet
# check a data type
  foo = 3
  $bar = [1,2,3]
  $baz = 'A string!'

  if $foo.is_a(Integer) {
    notify  { 'foo!': }
  }
  if $bar.is_a(Array) {
    notify { 'bar!': }
  }
  if $baz.is_a(String) {
    notify { 'baz!': }
  }
```

##### `value`

Data type: `Any`

The value to be checked

##### `type`

Data type: `Type`

The expected type

### `join_keys_to_values`

Type: Ruby 3.x API

Keys are cast to strings. If values are arrays, multiple keys
are added for each element. The return value is an array in
which each element is one joined key/value pair.

> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and
line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
formatting of values in the array) - see the `new` function for `String` and its formatting
options for `Array` and `Hash`.

#### Examples

##### Example Usage:

```puppet
join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]
```

#### `join_keys_to_values()`

Keys are cast to strings. If values are arrays, multiple keys
are added for each element. The return value is an array in
which each element is one joined key/value pair.

> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and
line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
formatting of values in the array) - see the `new` function for `String` and its formatting
options for `Array` and `Hash`.

Returns: `Hash` The joined hash

##### Examples

###### Example Usage:

```puppet
join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]
```

### `load_module_metadata`

Type: Ruby 3.x API

This function loads the metadata of a given module.

#### Examples

##### Example Usage:

```puppet
$metadata = load_module_metadata('archive')
notify { $metadata['author']: }
```

#### `load_module_metadata()`

The load_module_metadata function.

Returns: `Any` The modules metadata

##### Examples

###### Example Usage:

```puppet
$metadata = load_module_metadata('archive')
notify { $metadata['author']: }
```

### `loadjson`

Type: Ruby 3.x API

The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.

#### Examples

##### Example Usage:

```puppet
$myhash = loadjson('/etc/puppet/data/myhash.json')
$myhash = loadjson('https://example.local/my_hash.json')
$myhash = loadjson('https://username:password@example.local/my_hash.json')
$myhash = loadjson('no-file.json', {'default' => 'val
```

#### `loadjson()`

The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.

Returns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.

##### Examples

###### Example Usage:

```puppet
$myhash = loadjson('/etc/puppet/data/myhash.json')
$myhash = loadjson('https://example.local/my_hash.json')
$myhash = loadjson('https://username:password@example.local/my_hash.json')
$myhash = loadjson('no-file.json', {'default' => 'val
```

### `loadyaml`

Type: Ruby 3.x API

The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.

#### Examples

##### Example Usage:

```puppet
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
$myhash = loadyaml('https://example.local/my_hash.yaml')
$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')
$myhash = loadyaml('no-file.yaml', {'default' => 'val
```

#### `loadyaml()`

The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.

Returns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.

##### Examples

###### Example Usage:

```puppet
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
$myhash = loadyaml('https://example.local/my_hash.yaml')
$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')
$myhash = loadyaml('no-file.yaml', {'default' => 'val
```

### `member`

Type: Ruby 3.x API

The variable can be a string, fixnum, or array.

> **Note**: This function does not support nested arrays. If the first argument contains
nested arrays, it will not recurse through them.

> *Note:*
Since Puppet 4.0.0 the same can be performed in the Puppet language.
For single values the operator `in` can be used:
`'a' in ['a', 'b']  # true`
For arrays by using operator `-` to compute a diff:
`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`
`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`

> **Note** that since Puppet 5.2.0, the general form to test the content of an array or
hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)
and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.

#### Examples

##### **Usage**

```puppet
member(['a','b'], 'b') # Returns: true
member(['a', 'b', 'c'], ['a', 'b']) # Returns: true
member(['a','b'], 'c') # Returns: false
member(['a', 'b', 'c'], ['d', 'b']) # Returns: false
```

#### `member()`

The variable can be a string, fixnum, or array.

> **Note**: This function does not support nested arrays. If the first argument contains
nested arrays, it will not recurse through them.

> *Note:*
Since Puppet 4.0.0 the same can be performed in the Puppet language.
For single values the operator `in` can be used:
`'a' in ['a', 'b']  # true`
For arrays by using operator `-` to compute a diff:
`['d', 'b'] - ['a', 'b', 'c'] == []  # false because 'd' is not subtracted`
`['a', 'b'] - ['a', 'b', 'c'] == []  # true because both 'a' and 'b' are subtracted`

> **Note** that since Puppet 5.2.0, the general form to test the content of an array or
hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)
and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.

Returns: `Any` Returns whether the given value was a member of the array

##### Examples

###### **Usage**

```puppet
member(['a','b'], 'b') # Returns: true
member(['a', 'b', 'c'], ['a', 'b']) # Returns: true
member(['a','b'], 'c') # Returns: false
member(['a', 'b', 'c'], ['d', 'b']) # Returns: false
```

### `merge`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead.

#### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)`

The merge function.

Returns: `Any`

##### `*args`

Data type: `Any`



##### `&block`

Data type: `Optional[Variant[Callable[2,2], Callable[3,3]]]`

### `merge`

Type: Ruby 3.x API

When there is a duplicate key, the key in the rightmost hash will "win."

Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
  `$merged_hash = $hash1 + $h

#### Examples

##### **Usage**

```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```

#### `merge()`

When there is a duplicate key, the key in the rightmost hash will "win."

Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
  `$merged_hash = $hash1 + $h

Returns: `Hash` The merged hash

##### Examples

###### **Usage**

```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```

### `num2bool`

Type: Ruby 3.x API

> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.
See the new() function in Puppet for the many available type conversions.

#### `num2bool()`

> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.
See the new() function in Puppet for the many available type conversions.

Returns: `Boolean` Boolean(0) # false for any zero or negative number
Boolean(1) # true for any positive number

### `os_version_gte`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead.

#### `os_version_gte(Any *$args)`

The os_version_gte function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `parsehocon`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead.

#### `parsehocon(Any *$args)`

The parsehocon function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `parsejson`

Type: Ruby 3.x API

> *Note:*
  The optional second argument can be used to pass a default value that will
  be returned if the parsing of the JSON string failed or if the JSON parse
  evaluated to nil.

#### `parsejson()`

> *Note:*
  The optional second argument can be used to pass a default value that will
  be returned if the parsing of the JSON string failed or if the JSON parse
  evaluated to nil.

Returns: `Any` convert JSON into Puppet structure

### `parsepson`

Type: Ruby 4.x API

For more information on PSON please see the following link:
https://puppet.com/docs/puppet/7/http_api/pson.html

#### Examples

##### How to parse pson

```puppet
$data = parsepson('{"a":"1","b":"2"}')
```

#### `parsepson(String[1] $pson_string, Optional[Any] $default)`

For more information on PSON please see the following link:
https://puppet.com/docs/puppet/7/http_api/pson.html

Returns: `Data`

##### Examples

###### How to parse pson

```puppet
$data = parsepson('{"a":"1","b":"2"}')
```

##### `pson_string`

Data type: `String[1]`

A valid PSON string

##### `default`

Data type: `Optional[Any]`

An optional default to return if parsing the pson_string fails

### `parseyaml`

Type: Ruby 3.x API

> *Note:*
  The optional second argument can be used to pass a default value that will
  be returned if the parsing of YAML string have failed.

#### `parseyaml()`

> *Note:*
  The optional second argument can be used to pass a default value that will
  be returned if the parsing of YAML string have failed.

Returns: `Any` converted YAML into Puppet structure

### `pick`

Type: Ruby 3.x API

This function is similar to a coalesce function in SQL.

Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the following:

```$real_jenkins_version = pick($::jenkins_version, '1.449')```

> *Note:*
  The value of $real_jenkins_version will first look for a top-scope variable
  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
  Enterprise Console are brought into Puppet as top-scope variables), and,
  failing that, will use a default value of 1.449.

#### `pick()`

This function is similar to a coalesce function in SQL.

Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the following:

```$real_jenkins_version = pick($::jenkins_version, '1.449')```

> *Note:*
  The value of $real_jenkins_version will first look for a top-scope variable
  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
  Enterprise Console are brought into Puppet as top-scope variables), and,
  failing that, will use a default value of 1.449.

Returns: `Any` the first value in a list of values that is not undefined or an empty string.

### <a name="pick_default"></a>`pick_default`

Type: Ruby 3.x API

Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the
following:

  $real_jenkins_version = pick_default($::jenkins_version, '1.449')

> *Note:*
  The value of $real_jenkins_version will first look for a top-scope variable
  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
  Enterprise Console are brought into Puppet as top-scope variables), and,
  failing that, will use a default value of 1.449.

  Contrary to the pick() function, the pick_default does not fail if
  all arguments are empty. This allows pick_default to use an empty value as
  default.

#### `pick_default()`

Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the
following:

  $real_jenkins_version = pick_default($::jenkins_version, '1.449')

> *Note:*
  The value of $real_jenkins_version will first look for a top-scope variable
  called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
  Enterprise Console are brought into Puppet as top-scope variables), and,
  failing that, will use a default value of 1.449.

  Contrary to the pick() function, the pick_default does not fail if
  all arguments are empty. This allows pick_default to use an empty value as
  default.

Returns: `Any` This function is similar to a coalesce function in SQL in that it will return
the first value in a list of values that is not undefined or an empty string
If no value is found, it will return the last argument.

### <a name="powershell_escape"></a>`powershell_escape`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead.

#### `powershell_escape(Any *$args)`

The powershell_escape function.

Returns: `Any`

##### `*args`

Data type: `Any`



### <a name="prefix"></a>`prefix`

Type: Ruby 3.x API

> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
['a', 'b', 'c'].map |$x| { "p${x}" }

#### Examples

##### **Usage**

```puppet

prefix(['a','b','c'], 'p')
Will return: ['pa','pb','pc']
```

#### `prefix()`

> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
['a', 'b', 'c'].map |$x| { "p${x}" }

Returns: `Hash` or [Array] The passed values now contains the passed prefix

##### Examples

###### **Usage**

```puppet

prefix(['a','b','c'], 'p')
Will return: ['pa','pb','pc']
```

### `pry`

Type: Ruby 3.x API

This is useful for debugging manifest code at specific points during a compilation.

#### Examples

##### **Usage**

```puppet

`pry()`
```

#### `pry()`

This is useful for debugging manifest code at specific points during a compilation.

Returns: `Any` debugging information

##### Examples

###### **Usage**

```puppet

`pry()`
```

### `pw_hash`

Type: Ruby 3.x API

The first argument to this function is the password to hash. If it is
undef or an empty string, this function returns undef.

The second argument to this function is which hash algorithm to use. It
will be converted into the appropriate crypt(3) hash specifier. Valid
hash types are:

|Hash type|Prefix|Note                 |
|---------|------|---------------------|
|MD5      |1     |                     |
|SHA-256  |5     |                     |
|SHA-512  |6     |Recommended          |
|bcrypt   |2b    |                     |
|bcrypt-a |2a    |bug compatible       |
|bcrypt-x |2x    |bug compatible       |
|bcrypt-y |2y    |historic alias for 2b|

The third argument to this function is the salt to use. For bcrypt-type hashes,
the first two characters of the salt represent a strength parameter, with a value
between 4 and 31 inclusive.

> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your
  environment contains several different operating systems, ensure that they
  are compatible before using this function.

#### `pw_hash()`

The first argument to this function is the password to hash. If it is
undef or an empty string, this function returns undef.

The second argument to this function is which hash algorithm to use. It
will be converted into the appropriate crypt(3) hash specifier. Valid
hash types are:

|Hash type|Prefix|Note                 |
|---------|------|---------------------|
|MD5      |1     |                     |
|SHA-256  |5     |                     |
|SHA-512  |6     |Recommended          |
|bcrypt   |2b    |                     |
|bcrypt-a |2a    |bug compatible       |
|bcrypt-x |2x    |bug compatible       |
|bcrypt-y |2y    |historic alias for 2b|

The third argument to this function is the salt to use. For bcrypt-type hashes,
the first two characters of the salt represent a strength parameter, with a value
between 4 and 31 inclusive.

> *Note:*: this uses the Puppet Server's implementation of crypt(3). If your
  environment contains several different operating systems, ensure that they
  are compatible before using this function.

Returns: `String` Provides a crypt hash usable on most POSIX systems.

### `range`

Type: Ruby 3.x API

NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.

> *Note:*
  Passing a third argument will cause the generated range to step by that
  interval, e.g.

The Puppet Language support Integer and Float ranges by using the type system. Those are suitable for
iterating a given number of times.

 Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9

#### Examples

##### **Usage**

```puppet
range("0", "9")
Will return: [0,1,2,3,4,5,6,7,8,9]

range("00", "09")
Will return: [0,1,2,3,4,5,6,7,8,9]
(Zero padded strings are converted to integers automatically)

range("a", "c")
Will return: ["a","b","c"]

range("host01", "host10")
Will return: ["host01", "host02", ..., "host09", "host10"]

range("0", "9", "2")
Will return: [0,2,4,6,8]
```

#### `range()`

NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.

> *Note:*
  Passing a third argument will cause the generated range to step by that
  interval, e.g.

The Puppet Language support Integer and Float ranges by using the type system. Those are suitable for
iterating a given number of times.

 Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9

Returns: `Any` the range is extrapolated as an array

##### Examples

###### **Usage**

```puppet
range("0", "9")
Will return: [0,1,2,3,4,5,6,7,8,9]

range("00", "09")
Will return: [0,1,2,3,4,5,6,7,8,9]
(Zero padded strings are converted to integers automatically)

range("a", "c")
Will return: ["a","b","c"]

range("host01", "host10")
Will return: ["host01", "host02", ..., "host09", "host10"]

range("0", "9", "2")
Will return: [0,2,4,6,8]
```

### `regexpescape`

Type: Ruby 3.x API

Regexp escape a string or array of strings.
Requires either a single string or an array as an input.

#### `regexpescape()`

The regexpescape function.

Returns: `String` A string of characters with metacharacters converted to their escaped form.

### `reject`

Type: Ruby 3.x API

> *Note:*
Since Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:
['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a

#### Examples

##### **Usage**

```puppet

reject(['aaa','bbb','ccc','aaaddd'], 'aaa')

Would return: ['bbb','ccc']
```

#### `reject()`

> *Note:*
Since Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:
['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /a

Returns: `Any` an array containing all the elements which doesn'' match the provided regular expression

##### Examples

###### **Usage**

```puppet

reject(['aaa','bbb','ccc','aaaddd'], 'aaa')

Would return: ['bbb','ccc']
```

### `reverse`

Type: Ruby 3.x API

> *Note:* that the same can be done with the reverse_each() function in Puppet.

#### `reverse()`

> *Note:* that the same can be done with the reverse_each() function in Puppet.

Returns: `Any` reversed string or array

### `seeded_rand`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead.

#### `seeded_rand(Any *$args)`

The seeded_rand function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `seeded_rand_string`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead.

#### `seeded_rand_string(Any *$args)`

The seeded_rand_string function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `shell_escape`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead.

#### `shell_escape(Any *$args)`

The shell_escape function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `shell_join`

Type: Ruby 3.x API

Builds a command line string from the given array of strings.
Each array item is escaped for Bourne shell. All items are then joined together, with a single space in between.
This function behaves the same as ruby's Shellwords.shelljoin() function

#### `shell_join()`

Builds a command line string from the given array of strings.
Each array item is escaped for Bourne shell. All items are then joined together, with a single space in between.
This function behaves the same as ruby's Shellwords.shelljoin() function

Returns: `Any` a command line string

### `shell_split`

Type: Ruby 3.x API

This function behaves the same as ruby's Shellwords.shellsplit() function

#### `shell_split()`

This function behaves the same as ruby's Shellwords.shellsplit() function

Returns: `Any` array of tokens

### `shuffle`

Type: Ruby 3.x API

@summary
 Randomizes the order of a string or array elements.

#### `shuffle()`

@summary
 Randomizes the order of a string or array elements.

Returns: `Any` randomized string or array

### `squeeze`

Type: Ruby 3.x API

Returns a new string where runs of the same character that occur in this set are replaced by a single character.

#### `squeeze()`

The squeeze function.

Returns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.

### `stdlib::batch_escape`

Type: Ruby 4.x API

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

#### `stdlib::batch_escape(Any $string)`

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

Returns: `Any` An escaped string that can be safely used in a batch command line.

##### `string`

Data type: `Any`

The string to escape

### `stdlib::crc32`

Type: Ruby 4.x API

Run a CRC32 calculation against a given value.

#### Examples

##### Check a simple string value

```puppet
stdlib::crc32('my string') == '18fbd270'
```

##### Check a Sensitive datatype

```puppet
stdlib::crc32(sensitive('my string')) == '18fbd270'
```

##### Check a number

```puppet
stdlib::crc32(100.0) == 'a3fd429a'
stdlib::crc32(100.00000) == 'a3fd429a'
```

#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`

Run a CRC32 calculation against a given value.

Returns: `String` String

##### Examples

###### Check a simple string value

```puppet
stdlib::crc32('my string') == '18fbd270'
```

###### Check a Sensitive datatype

```puppet
stdlib::crc32(sensitive('my string')) == '18fbd270'
```

###### Check a number

```puppet
stdlib::crc32(100.0) == 'a3fd429a'
stdlib::crc32(100.00000) == 'a3fd429a'
```

##### `my_data`

Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`

The ScalarData to evaluate

### `stdlib::deferrable_epp`

Type: Puppet Language

This function returns either a rendered template or a deferred function to render at runtime.
If any of the values in the variables hash are deferred, then the template will be deferred.

Note: this function requires all parameters to be explicitly passed in. It cannot expect to
use facts, class variables, and other variables in scope. This is because when deferred, we
have to explicitly pass the entire scope to the client.

#### `stdlib::deferrable_epp(String $template, Hash $variables)`

This function returns either a rendered template or a deferred function to render at runtime.
If any of the values in the variables hash are deferred, then the template will be deferred.

Note: this function requires all parameters to be explicitly passed in. It cannot expect to
use facts, class variables, and other variables in scope. This is because when deferred, we
have to explicitly pass the entire scope to the client.

Returns: `Variant[String, Sensitive[String], Deferred]`

##### `template`

Data type: `String`



##### `variables`

Data type: `Hash`

### `stdlib::end_with`

Type: Ruby 4.x API

Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.

#### Examples

##### 

```puppet
'foobar'.stdlib::end_with('bar') => true
'foobar'.stdlib::end_with('foo') => false
'foobar'.stdlib::end_with(['foo', 'baz']) => false
```

#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`

The stdlib::end_with function.

Returns: `Boolean` True or False

##### Examples

###### 

```puppet
'foobar'.stdlib::end_with('bar') => true
'foobar'.stdlib::end_with('foo') => false
'foobar'.stdlib::end_with(['foo', 'baz']) => false
```

##### `test_string`

Data type: `String`

The string to check

##### `suffixes`

Data type: `Variant[String[1],Array[String[1], 1]]`

The suffixes to check

### `stdlib::ensure`

Type: Puppet Language

function to cast ensure parameter to resource specific value

#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`

The stdlib::ensure function.

Returns: `String`

##### `ensure`

Data type: `Variant[Boolean, Enum['present', 'absent']]`



##### `resource`

Data type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`

### `stdlib::ensure_packages`

Type: Ruby 4.x API

It optionally takes a hash as a second parameter that will be passed as the
third argument to the ensure_resource() function.

#### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)`

The stdlib::ensure_packages function.

Returns: `Undef` Returns nothing.

##### `packages`

Data type: `Variant[String[1], Array[String[1]]]`

The packages to ensure are installed.

##### `default_attributes`

Data type: `Optional[Hash]`

Default attributes to be passed to the `ensure_resource()` function

#### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)`

The stdlib::ensure_packages function.

Returns: `Undef` Returns nothing.

##### `packages`

Data type: `Hash[String[1], Any]`

The packages to ensure are installed. The keys are packages and values are the attributes specific to that package.

##### `default_attributes`

Data type: `Optional[Hash]`

Default attributes. Package specific attributes from the `packages` parameter will take precedence.

### `stdlib::extname`

Type: Ruby 4.x API

If Path is a Dotfile, or starts with a Period, then the starting Dot is not
dealt with the Start of the Extension.

An empty String will also be returned, when the Period is the last Character
in Path.

#### Examples

##### Determining the Extension of a Filename

```puppet
stdlib::extname('test.rb')       => '.rb'
stdlib::extname('a/b/d/test.rb') => '.rb'
stdlib::extname('test')          => ''
stdlib::extname('.profile')      => ''
```

#### `stdlib::extname(String $filename)`

If Path is a Dotfile, or starts with a Period, then the starting Dot is not
dealt with the Start of the Extension.

An empty String will also be returned, when the Period is the last Character
in Path.

Returns: `String` The Extension starting from the last Period

##### Examples

###### Determining the Extension of a Filename

```puppet
stdlib::extname('test.rb')       => '.rb'
stdlib::extname('a/b/d/test.rb') => '.rb'
stdlib::extname('test')          => ''
stdlib::extname('.profile')      => ''
```

##### `filename`

Data type: `String`

The Filename

### `stdlib::fqdn_rand_string`

Type: Ruby 4.x API

Optionally, you can specify a character set for the function (defaults to alphanumeric).

#### Examples

##### Example Usage:

```puppet
stdlib::fqdn_rand_string(10)
stdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')
stdlib::fqdn_rand_string(10, undef, 'custom seed')
```

#### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)`

Optionally, you can specify a character set for the function (defaults to alphanumeric).

Returns: `String`

##### Examples

###### Example Usage:

```puppet
stdlib::fqdn_rand_string(10)
stdlib::fqdn_rand_string(10, 'ABCDEF!@$%^')
stdlib::fqdn_rand_string(10, undef, 'custom seed')
```

##### `length`

Data type: `Integer[1]`

The length of the resulting string.

##### `charset`

Data type: `Optional[Optional[String]]`

The character set to use.

##### `*seed`

Data type: `Optional[Any]`

The seed for repeatable randomness.

### `stdlib::fqdn_rotate`

Type: Ruby 4.x API

Rotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness.

#### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)`

The stdlib::fqdn_rotate function.

Returns: `String` Returns the rotated String

##### Examples

###### Rotating a String

```puppet
stdlib::fqdn_rotate('abcd')
```

###### Using a custom seed

```puppet
stdlib::fqdn_rotate('abcd', 'custom seed')
```

##### `input`

Data type: `String`

The String you want rotated a random number of times

##### `*seeds`

Data type: `Optional[Variant[Integer,String]]`

One of more values to use as a custom seed. These will be combined with the host's FQDN

#### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)`

The stdlib::fqdn_rotate function.

Returns: `Array` Returns the rotated Array

##### Examples

###### Rotating an Array

```puppet
stdlib::fqdn_rotate(['a', 'b', 'c', 'd'])
```

###### Using custom seeds

```puppet
stdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1)
```

##### `input`

Data type: `Array`

The Array you want rotated a random number of times

##### `*seeds`

Data type: `Optional[Variant[Integer,String]]`

One of more values to use as a custom seed. These will be combined with the host's FQDN

### `stdlib::has_function`

Type: Ruby 4.x API

Determines whether the Puppet runtime has access to a function by the
name provided.

#### Examples

##### Using stdlib::has_function()

```puppet
stdlib::has_function('stdlib::has_function') # true
stdlib::has_function('not_a_function') # false
```

#### `stdlib::has_function(String[1] $function_name)`

Determines whether the Puppet runtime has access to a function by the
name provided.

Returns: `Boolean`

##### Examples

###### Using stdlib::has_function()

```puppet
stdlib::has_function('stdlib::has_function') # true
stdlib::has_function('not_a_function') # false
```

##### `function_name`

Data type: `String[1]`

### `stdlib::has_interface_with`

Type: Ruby 4.x API

Can be called with one, or two arguments.

#### `stdlib::has_interface_with(String[1] $interface)`

The stdlib::has_interface_with function.

Returns: `Boolean` Returns `true` if `interface` exists and `false` otherwise

##### Examples

###### When called with a single argument, the presence of the interface is checked

```puppet
stdlib::has_interface_with('lo') # Returns `true`
```

##### `interface`

Data type: `String[1]`

The name of an interface

#### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)`

The stdlib::has_interface_with function.

Returns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false`

##### Examples

###### Checking if an interface exists with a given mac address

```puppet
stdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false`
```

###### Checking if an interface exists with a given IP address

```puppet
stdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true`
```

##### `kind`

Data type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']`

A supported interface attribute

##### `value`

Data type: `String[1]`

The value of the attribute

### `stdlib::ip_in_range`

Type: Ruby 4.x API

Returns true if the ipaddress is within the given CIDRs

#### Examples

##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)

```puppet
stdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true
```

#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`

The stdlib::ip_in_range function.

Returns: `Boolean` True or False

##### Examples

###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)

```puppet
stdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true
```

##### `ipaddress`

Data type: `String`

The IP address to check

##### `range`

Data type: `Variant[String, Array]`

One CIDR or an array of CIDRs
defining the range(s) to check against

### `stdlib::merge`

Type: Ruby 4.x API

When there is a duplicate key, the key in the rightmost hash will "win."

Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
 `$merged_hash = $hash1 + $hash2`

If stdlib::merge is given a single Iterable (Array, Hash, etc.) it will call a given block with
up to three parameters, and merge each resulting Hash into the accumulated result. All other types
of values returned from the block (typically undef) are skipped (not merged).

The codeblock can take 2 or three parameters:
* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)
* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value

If the iterable is empty, or no hash was returned from the given block, an empty hash is returned. In the given block, a call to `next()`
will skip that entry, and a call to `break()` will end the iteration.

The iterative `stdlib::merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash
does not have to be copied in each iteration and thus will perform much better with large inputs.

#### Examples

##### Using stdlib::merge()

```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```

##### counting occurrences of strings in an array

```puppet
['a', 'b', 'c', 'c', 'd', 'b'].stdlib::merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }
```

##### skipping values for entries that are longer than 1 char

```puppet
['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].stdlib::merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }
```

#### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)`

The stdlib::merge function.

Returns: `Hash[Scalar,Any]` The merged hash

##### `*args`

Data type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]`

Repeated Param - The hashes that are to be merged

#### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)`

The stdlib::merge function.

Returns: `Hash` The merged hash

##### `*args`

Data type: `Iterable`

Repeated Param - The hashes that are to be merged

##### `&block`

Data type: `Callable[3,3]`

A block placed on the repeatable param `args`

#### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)`

The stdlib::merge function.

Returns: `Hash` The merged hash

##### `*args`

Data type: `Iterable`

Repeated Param - The hashes that are to be merged

##### `&block`

Data type: `Callable[2,2]`

A block placed on the repeatable param `args`

### `stdlib::nested_values`

Type: Ruby 4.x API

Get list of nested values from given hash
This function will return list of nested Hash values and returns list of values in form of Array

#### Examples

##### Example Usage:

```puppet
$hash = {
  "key1" => "value1",
  "key2" => { "key2.1" => "value2.1"},
  "key3" => "value3"
}
$data = $hash.stdlib::nested_values
#Output : ["value1", "value2.1", "value3"]
```

#### `stdlib::nested_values(Hash $hash)`

The stdlib::nested_values function.

Returns: `Array` All the values found in the input hash included those deeply nested.

##### Examples

###### Example Usage:

```puppet
$hash = {
  "key1" => "value1",
  "key2" => { "key2.1" => "value2.1"},
  "key3" => "value3"
}
$data = $hash.stdlib::nested_values
#Output : ["value1", "value2.1", "value3"]
```

##### `hash`

Data type: `Hash`

A (nested) hash

### `stdlib::os_version_gte`

Type: Ruby 4.x API

> *Note:*
Only the major version is taken into account.

#### Examples

##### Example usage:#

```puppet
if stdlib::os_version_gte('Debian', '9') { }
if stdlib::os_version_gte('Ubuntu', '18.04') { }
```

#### `stdlib::os_version_gte(String[1] $os, String[1] $version)`

> *Note:*
Only the major version is taken into account.

Returns: `Boolean` `true` or `false

##### Examples

###### Example usage:#

```puppet
if stdlib::os_version_gte('Debian', '9') { }
if stdlib::os_version_gte('Ubuntu', '18.04') { }
```

##### `os`

Data type: `String[1]`

operating system

##### `version`

Data type: `String[1]`

### `stdlib::parsehocon`

Type: Ruby 4.x API

This function accepts HOCON as a string and converts it into the correct
Puppet structure

#### Examples

##### How to parse hocon

```puppet
$data = stdlib::parsehocon("{any valid hocon: string}")
```

#### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)`

The stdlib::parsehocon function.

Returns: `Data`

##### Examples

###### How to parse hocon

```puppet
$data = stdlib::parsehocon("{any valid hocon: string}")
```

##### `hocon_string`

Data type: `String`

A valid HOCON string

##### `default`

Data type: `Optional[Any]`

An optional default to return if parsing hocon_string fails

### `stdlib::powershell_escape`

Type: Ruby 4.x API

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

#### `stdlib::powershell_escape(Any $string)`

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

Returns: `Any` An escaped string that can be safely used in a PowerShell command line.

##### `string`

Data type: `Any`

The string to escape

### `stdlib::seeded_rand`

Type: Ruby 4.x API

Generates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness.

#### `stdlib::seeded_rand(Integer[1] $max, String $seed)`

The stdlib::seeded_rand function.

Returns: `Integer` A random number greater than or equal to 0 and less than max

##### `max`

Data type: `Integer[1]`

The maximum value.

##### `seed`

Data type: `String`

The seed used for repeatable randomness.

### `stdlib::seeded_rand_string`

Type: Ruby 4.x API

Generates a consistent random string of specific length based on provided seed.

#### Examples

##### Generate a consistently random string of length 8 with a seed:

```puppet
stdlib::seeded_rand_string(8, "${module_name}::redis_password")
```

##### Generate a random string from a specific set of characters:

```puppet
stdlib::seeded_rand_string(5, '', 'abcdef')
```

#### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`

The stdlib::seeded_rand_string function.

Returns: `String` Random string.

##### Examples

###### Generate a consistently random string of length 8 with a seed:

```puppet
stdlib::seeded_rand_string(8, "${module_name}::redis_password")
```

###### Generate a random string from a specific set of characters:

```puppet
stdlib::seeded_rand_string(5, '', 'abcdef')
```

##### `length`

Data type: `Integer[1]`

Length of string to be generated.

##### `seed`

Data type: `String`

Seed string.

##### `charset`

Data type: `Optional[String[2]]`

String that contains characters to use for the random string.

### `stdlib::sha256`

Type: Ruby 4.x API

Run a SHA256 calculation against a given value.

#### Examples

##### Check a simple string value

```puppet
stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
```

##### Check a Sensitive datatype

```puppet
stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
```

##### Check a number

```puppet
stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
```

#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`

Run a SHA256 calculation against a given value.

Returns: `String` String

##### Examples

###### Check a simple string value

```puppet
stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
```

###### Check a Sensitive datatype

```puppet
stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
```

###### Check a number

```puppet
stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
```

##### `my_data`

Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`

The ScalarData to evaluate

### `stdlib::shell_escape`

Type: Ruby 4.x API

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

This function behaves the same as ruby's Shellwords.shellescape() function.

#### `stdlib::shell_escape(Any $string)`

>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.

This function behaves the same as ruby's Shellwords.shellescape() function.

Returns: `Any` An escaped string that can be safely used in a Bourne shell command line.

##### `string`

Data type: `Any`

The string to escape

### `stdlib::start_with`

Type: Ruby 4.x API

Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.

#### Examples

##### 

```puppet
'foobar'.stdlib::start_with('foo') => true
'foobar'.stdlib::start_with('bar') => false
'foObar'.stdlib::start_with(['bar', 'baz']) => false
```

#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`

The stdlib::start_with function.

Returns: `Boolean` True or False

##### Examples

###### 

```puppet
'foobar'.stdlib::start_with('foo') => true
'foobar'.stdlib::start_with('bar') => false
'foObar'.stdlib::start_with(['bar', 'baz']) => false
```

##### `test_string`

Data type: `String`

The string to check

##### `prefixes`

Data type: `Variant[String[1],Array[String[1], 1]]`

The prefixes to check.

### `stdlib::str2resource`

Type: Ruby 4.x API

This attempts to convert a string like 'File[/foo]' into the
puppet resource `File['/foo']` as detected by the catalog.

Things like 'File[/foo, /bar]' are not supported as a
title might contain things like ',' or ' '.  There is
no clear value seperator to use.

This function can depend on the parse order of your
manifests/modules as it inspects the catalog thus far.

#### Examples

##### 

```puppet
stdlib::str2resource('File[/foo]') => File[/foo]
```

#### `stdlib::str2resource(String $res_string)`

This attempts to convert a string like 'File[/foo]' into the
puppet resource `File['/foo']` as detected by the catalog.

Things like 'File[/foo, /bar]' are not supported as a
title might contain things like ',' or ' '.  There is
no clear value seperator to use.

This function can depend on the parse order of your
manifests/modules as it inspects the catalog thus far.

Returns: `Any` Puppet::Resource

##### Examples

###### 

```puppet
stdlib::str2resource('File[/foo]') => File[/foo]
```

##### `res_string`

Data type: `String`

The string to lookup as a resource

### `stdlib::to_json`

Type: Ruby 4.x API

Convert a data structure and output to JSON

#### Examples

##### Output JSON to a file

```puppet
file { '/tmp/my.json':
  ensure  => file,
  content => stdlib::to_json($myhash),
}
```

#### `stdlib::to_json(Any $data)`

Convert a data structure and output to JSON

Returns: `String` Converted data to JSON

##### Examples

###### Output JSON to a file

```puppet
file { '/tmp/my.json':
  ensure  => file,
  content => stdlib::to_json($myhash),
}
```

##### `data`

Data type: `Any`

Data structure which needs to be converted into JSON

### `stdlib::to_json_pretty`

Type: Ruby 4.x API

Convert data structure and output to pretty JSON

#### Examples

##### **Usage**

```puppet
* how to output pretty JSON to file
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty($myhash),
  }

* how to output pretty JSON skipping over keys with undef values
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty({
      param_one => 'value',
      param_two => undef,
    }, true),
  }

* how to output pretty JSON using tabs for indentation
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty({
      param_one => 'value',
      param_two => {
        param_more => 42,
      },
    }, nil, {indent => '    '}),
  }
```

#### `stdlib::to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{
indent       => Optional[String],
space        => Optional[String],
space_before => Optional[String],
object_nl    => Optional[String],
array_nl     => Optional[String],
allow_nan    => Optional[Boolean],
max_nesting  => Optional[Integer[-1,default]],
}]] $opts)`

The stdlib::to_json_pretty function.

Returns: `Any` converted data to pretty json

##### Examples

###### **Usage**

```puppet
* how to output pretty JSON to file
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty($myhash),
  }

* how to output pretty JSON skipping over keys with undef values
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty({
      param_one => 'value',
      param_two => undef,
    }, true),
  }

* how to output pretty JSON using tabs for indentation
  file { '/tmp/my.json':
    ensure  => file,
    content => stdlib::to_json_pretty({
      param_one => 'value',
      param_two => {
        param_more => 42,
      },
    }, nil, {indent => '    '}),
  }
```

##### `data`

Data type: `Variant[Hash, Array]`

data structure which needs to be converted to pretty json

##### `skip_undef`

Data type: `Optional[Optional[Boolean]]`

value `true` or `false`

##### `opts`

Data type:

```puppet
Optional[Struct[{
indent       => Optional[String],
space        => Optional[String],
space_before => Optional[String],
object_nl    => Optional[String],
array_nl     => Optional[String],
allow_nan    => Optional[Boolean],
max_nesting  => Optional[Integer[-1,default]],
}]]
```

hash-map of settings passed to JSON.pretty_generate, see
https://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.
Note that `max_nesting` doesn't take the value `false`; use `-1` instead.

### `stdlib::to_python`

Type: Ruby 4.x API

Convert an object into a String containing its Python representation

#### Examples

##### how to output Python

```puppet
# output Python to a file
$listen = '0.0.0.0'
$port = 8000
file { '/opt/acme/etc/settings.py':
  content => inline_epp(@("SETTINGS")),
    LISTEN = <%= stdlib::to_python($listen) %>
    PORT = <%= stdlib::to_python($mailserver) %>
    | SETTINGS
}
```

#### `stdlib::to_python(Any $object)`

The stdlib::to_python function.

Returns: `String` The String representation of the object

##### Examples

###### how to output Python

```puppet
# output Python to a file
$listen = '0.0.0.0'
$port = 8000
file { '/opt/acme/etc/settings.py':
  content => inline_epp(@("SETTINGS")),
    LISTEN = <%= stdlib::to_python($listen) %>
    PORT = <%= stdlib::to_python($mailserver) %>
    | SETTINGS
}
```

##### `object`

Data type: `Any`

The object to be converted

### `stdlib::to_ruby`

Type: Ruby 4.x API

Convert an object into a String containing its Ruby representation

#### Examples

##### how to output Ruby

```puppet
# output Ruby to a file
$listen = '0.0.0.0'
$port = 8000
file { '/opt/acme/etc/settings.rb':
  content => inline_epp(@("SETTINGS")),
    LISTEN = <%= stdlib::to_ruby($listen) %>
    PORT = <%= stdlib::to_ruby($mailserver) %>
    | SETTINGS
}
```

#### `stdlib::to_ruby(Any $object)`

The stdlib::to_ruby function.

Returns: `String` The String representation of the object

##### Examples

###### how to output Ruby

```puppet
# output Ruby to a file
$listen = '0.0.0.0'
$port = 8000
file { '/opt/acme/etc/settings.rb':
  content => inline_epp(@("SETTINGS")),
    LISTEN = <%= stdlib::to_ruby($listen) %>
    PORT = <%= stdlib::to_ruby($mailserver) %>
    | SETTINGS
}
```

##### `object`

Data type: `Any`

The object to be converted

### `stdlib::to_toml`

Type: Ruby 4.x API

Convert a data structure and output to TOML.

#### Examples

##### How to output TOML to a file

```puppet
file { '/tmp/config.toml':
  ensure  => file,
  content => stdlib::to_toml($myhash),
}
```

#### `stdlib::to_toml(Hash $data)`

The stdlib::to_toml function.

Returns: `String` Converted data as TOML string

##### Examples

###### How to output TOML to a file

```puppet
file { '/tmp/config.toml':
  ensure  => file,
  content => stdlib::to_toml($myhash),
}
```

##### `data`

Data type: `Hash`

Data structure which needs to be converted into TOML

### `stdlib::to_yaml`

Type: Ruby 4.x API

Convert a data structure and output it as YAML

#### Examples

##### Output YAML to a file

```puppet
file { '/tmp/my.yaml':
  ensure  => file,
  content => stdlib::to_yaml($myhash),
}
```

##### Use options to control the output format

```puppet
file { '/tmp/my.yaml':
  ensure  => file,
  content => stdlib::to_yaml($myhash, {indentation => 4})
}
```

#### `stdlib::to_yaml(Any $data, Optional[Hash] $options)`

Convert a data structure and output it as YAML

Returns: `String` The YAML document

##### Examples

###### Output YAML to a file

```puppet
file { '/tmp/my.yaml':
  ensure  => file,
  content => stdlib::to_yaml($myhash),
}
```

###### Use options to control the output format

```puppet
file { '/tmp/my.yaml':
  ensure  => file,
  content => stdlib::to_yaml($myhash, {indentation => 4})
}
```

##### `data`

Data type: `Any`

The data you want to convert to YAML

##### `options`

Data type: `Optional[Hash]`

A hash of options that will be passed to Ruby's Psych library. Note, this could change between Puppet versions, but at time of writing these are `line_width`, `indentation`, and `canonical`.

### `stdlib::type_of`

Type: Ruby 4.x API

See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.

The built-in type() function in puppet is generally preferred over this function
this function is provided for backwards compatibility.

#### Examples

##### how to compare values' types

```puppet
# compare the types of two values
if stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail("first_value and second_value are different types") }
```

##### how to compare against an abstract type

```puppet
unless stdlib::type_of($first_value) <= Numeric { fail("first_value must be Numeric") }
unless stdlib::type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") }
```

#### `stdlib::type_of(Any $value)`

See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.

The built-in type() function in puppet is generally preferred over this function
this function is provided for backwards compatibility.

Returns: `String` the type of the passed value

##### Examples

###### how to compare values' types

```puppet
# compare the types of two values
if stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail("first_value and second_value are different types") }
```

###### how to compare against an abstract type

```puppet
unless stdlib::type_of($first_value) <= Numeric { fail("first_value must be Numeric") }
unless stdlib::type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") }
```

##### `value`

Data type: `Any`

### `stdlib::validate_domain_name`

Type: Ruby 4.x API

Validate that all values passed are syntactically correct domain names.
Fail compilation if any value fails this check.

#### Examples

##### Passing examples

```puppet
$my_domain_name = 'server.domain.tld'
stdlib::validate_domain_name($my_domain_name)
stdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)
stdlib::validate_domain_name('www.example.2com')
```

##### Failing examples (causing compilation to abort)

```puppet
stdlib::validate_domain_name(1)
stdlib::validate_domain_name(true)
stdlib::validate_domain_name('invalid domain')
stdlib::validate_domain_name('-foo.example.com')
```

#### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)`

The stdlib::validate_domain_name function.

Returns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation

##### Examples

###### Passing examples

```puppet
$my_domain_name = 'server.domain.tld'
stdlib::validate_domain_name($my_domain_name)
stdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)
stdlib::validate_domain_name('www.example.2com')
```

###### Failing examples (causing compilation to abort)

```puppet
stdlib::validate_domain_name(1)
stdlib::validate_domain_name(true)
stdlib::validate_domain_name('invalid domain')
stdlib::validate_domain_name('-foo.example.com')
```

##### `*values`

Data type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]`

A domain name or an array of domain names to check

### `stdlib::validate_email_address`

Type: Ruby 4.x API

Validate that all values passed are valid email addresses.
Fail compilation if any value fails this check.

#### Examples

##### Passing examples

```puppet
$my_email = "waldo@gmail.com"
stdlib::validate_email_address($my_email)
stdlib::validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email)
```

##### Failing examples (causing compilation to abort)

```puppet
$some_array = [ 'bad_email@/d/efdf.com' ]
stdlib::validate_email_address($some_array)
```

#### `stdlib::validate_email_address(Stdlib::Email *$values)`

The stdlib::validate_email_address function.

Returns: `Undef` Fail compilation if any value fails this check.

##### Examples

###### Passing examples

```puppet
$my_email = "waldo@gmail.com"
stdlib::validate_email_address($my_email)
stdlib::validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email)
```

###### Failing examples (causing compilation to abort)

```puppet
$some_array = [ 'bad_email@/d/efdf.com' ]
stdlib::validate_email_address($some_array)
```

##### `*values`

Data type: `Stdlib::Email`

An e-mail address or an array of e-mail addresses to check

### `stdlib::xml_encode`

Type: Ruby 4.x API

This function can encode strings such that they can be used directly in XML files.
It supports encoding for both XML text (CharData) or attribute values (AttValue).

#### Examples

##### Creating an XML file from a template

```puppet
file { '/path/to/config.xml':
  ensure  => file,
  content => epp(
    'mymodule/config.xml.epp',
    {
      password => $password.stdlib::xml_encode,
    },
  ),
}
```

#### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)`

This function can encode strings such that they can be used directly in XML files.
It supports encoding for both XML text (CharData) or attribute values (AttValue).

Returns: `String` Returns the encoded CharData or AttValue string suitable for use in XML

##### Examples

###### Creating an XML file from a template

```puppet
file { '/path/to/config.xml':
  ensure  => file,
  content => epp(
    'mymodule/config.xml.epp',
    {
      password => $password.stdlib::xml_encode,
    },
  ),
}
```

##### `str`

Data type: `String`

The string to encode

##### `type`

Data type: `Optional[Enum['text','attr']]`

Whether to encode for text or an attribute

### `str2bool`

Type: Ruby 3.x API

> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.
See the function new() in Puppet for details what the Boolean data type supports.

#### `str2bool()`

> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.
See the function new() in Puppet for details what the Boolean data type supports.

Returns: `Any` This attempt to convert to boolean strings that contain things like: Y,y, 1, T,t, TRUE,true to 'true' and strings that contain things
like: 0, F,f, N,n, false, FALSE, no to 'false'.

### `str2saltedpbkdf2`

Type: Ruby 3.x API

Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.
Note, however, that Apple changes what's required periodically and this may not work for the latest
version of macOS. If that is the case you should get a helpful error message when Puppet tries to set
the pasword using the parameters you provide to the user resource.

#### Examples

##### Plain text password and salt

```puppet
$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)
user { 'jdoe':
  ensure     => present,
  iterations => $pw_info['interations'],
  password   => $pw_info['password_hex'],
  salt       => $pw_info['salt_hex'],
}
```

##### Sensitive password and salt

```puppet
$pw = Sensitive.new('Pa55w0rd')
$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')
$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))
user { 'jdoe':
  ensure     => present,
  iterations => unwrap($pw_info)['interations'],
  password   => unwrap($pw_info)['password_hex'],
  salt       => unwrap($pw_info)['salt_hex'],
}
```

#### `str2saltedpbkdf2()`

Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.
Note, however, that Apple changes what's required periodically and this may not work for the latest
version of macOS. If that is the case you should get a helpful error message when Puppet tries to set
the pasword using the parameters you provide to the user resource.

Returns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.

##### Examples

###### Plain text password and salt

```puppet
$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000)
user { 'jdoe':
  ensure     => present,
  iterations => $pw_info['interations'],
  password   => $pw_info['password_hex'],
  salt       => $pw_info['salt_hex'],
}
```

###### Sensitive password and salt

```puppet
$pw = Sensitive.new('Pa55w0rd')
$salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s')
$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))
user { 'jdoe':
  ensure     => present,
  iterations => unwrap($pw_info)['interations'],
  password   => unwrap($pw_info)['password_hex'],
  salt       => unwrap($pw_info)['salt_hex'],
}
```

### `str2saltedsha512`

Type: Ruby 3.x API

Given any simple string, you will get a hex version
of a salted-SHA512 password hash that can be inserted into your Puppet
manifests as a valid password attribute.

#### `str2saltedsha512()`

Given any simple string, you will get a hex version
of a salted-SHA512 password hash that can be inserted into your Puppet
manifests as a valid password attribute.

Returns: `Any` converted string as a hex version of a salted-SHA512 password hash

### `suffix`

Type: Ruby 3.x API

> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:

```['a', 'b', 'c'].map |$x| { "${x}p" }```

#### Examples

##### **Usage**

```puppet

suffix(['a','b','c'], 'p')
Will return: ['ap','bp','cp']
```

#### `suffix()`

> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:

```['a', 'b', 'c'].map |$x| { "${x}p" }```

Returns: `Any` Array or Hash with updated elements containing the passed suffix

##### Examples

###### **Usage**

```puppet

suffix(['a','b','c'], 'p')
Will return: ['ap','bp','cp']
```

### `swapcase`

Type: Ruby 3.x API

This function will swap the existing case of a string.

#### Examples

##### **Usage**

```puppet

swapcase("aBcD")
Would result in: "AbCd"
```

#### `swapcase()`

The swapcase function.

Returns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase

##### Examples

###### **Usage**

```puppet

swapcase("aBcD")
Would result in: "AbCd"
```

### `time`

Type: Ruby 3.x API

> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and
Timespan (a duration). The following example is equivalent to calling time() without
any arguments:

```Timestamp()```

#### Examples

##### **Usage**

```puppet

time()
Will return something like: 1311972653
```

#### `time()`

> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and
Timespan (a duration). The following example is equivalent to calling time() without
any arguments:

```Timestamp()```

Returns: `Any` the current time since epoch as an integer.

##### Examples

###### **Usage**

```puppet

time()
Will return something like: 1311972653
```

### `to_bytes`

Type: Ruby 3.x API

Takes a single string value as an argument.
These conversions reflect a layperson's understanding of
1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.

#### `to_bytes()`

Takes a single string value as an argument.
These conversions reflect a layperson's understanding of
1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.

Returns: `Any` converted value into bytes

### `to_json`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead.

#### `to_json(Any *$args)`

The to_json function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `to_json_pretty`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead.

#### `to_json_pretty(Any *$args)`

The to_json_pretty function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `to_python`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead.

#### `to_python(Any *$args)`

The to_python function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `to_ruby`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead.

#### `to_ruby(Any *$args)`

The to_ruby function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `to_toml`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead.

#### `to_toml(Any *$args)`

The to_toml function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `to_yaml`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead.

#### `to_yaml(Any *$args)`

The to_yaml function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `type_of`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead.

#### `type_of(Any *$args)`

The type_of function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `union`

Type: Ruby 3.x API

This function returns a union of two or more arrays.

#### Examples

##### **Usage**

```puppet

union(["a","b","c"],["b","c","d"])
Would return: ["a","b","c","d"]
```

#### `union()`

The union function.

Returns: `Any` a unionized array of two or more arrays

##### Examples

###### **Usage**

```puppet

union(["a","b","c"],["b","c","d"])
Would return: ["a","b","c","d"]
```

### `unix2dos`

Type: Ruby 3.x API

Takes a single string argument.

#### `unix2dos()`

Takes a single string argument.

Returns: `Any` the DOS version of the given string.

### `uriescape`

Type: Ruby 3.x API

> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.
Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.
This function should be removed once Puppet 7 is no longer supported.

#### `uriescape()`

> **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.
Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.
This function should be removed once Puppet 7 is no longer supported.

Returns: `String` a string that contains the converted value

### `validate_augeas`

Type: Ruby 3.x API

The first argument of this function should be a string to
test, and the second argument should be the name of the Augeas lens to use.
If Augeas fails to parse the string with the lens, the compilation will
abort with a parse error.

A third argument can be specified, listing paths which should
not be found in the file. The `$file` variable points to the location
of the temporary file being tested in the Augeas tree.

#### Examples

##### **Usage**

```puppet

If you want to make sure your passwd content never contains
a user `foo`, you could write:

  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])

If you wanted to ensure that no users used the '/bin/barsh' shell,
you could use:

  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']

If a fourth argument is specified, this will be the error message raised and
seen by the user.

A helpful error message can be returned like this:

  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
```

#### `validate_augeas()`

The first argument of this function should be a string to
test, and the second argument should be the name of the Augeas lens to use.
If Augeas fails to parse the string with the lens, the compilation will
abort with a parse error.

A third argument can be specified, listing paths which should
not be found in the file. The `$file` variable points to the location
of the temporary file being tested in the Augeas tree.

Returns: `Any` validate string using an Augeas lens

##### Examples

###### **Usage**

```puppet

If you want to make sure your passwd content never contains
a user `foo`, you could write:

  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])

If you wanted to ensure that no users used the '/bin/barsh' shell,
you could use:

  validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']

If a fourth argument is specified, this will be the error message raised and
seen by the user.

A helpful error message can be returned like this:

  validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
```

### `validate_cmd`

Type: Ruby 3.x API

The first argument of this function should be a string to
test, and the second argument should be a path to a test command
taking a % as a placeholder for the file path (will default to the end).
If the command, launched against a tempfile containing the passed string,
returns a non-null value, compilation will abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.

A helpful error message can be returned like this:

#### Examples

##### **Usage**

```puppet

Defaults to end of path
  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')

% as file location
  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
```

#### `validate_cmd()`

The first argument of this function should be a string to
test, and the second argument should be a path to a test command
taking a % as a placeholder for the file path (will default to the end).
If the command, launched against a tempfile containing the passed string,
returns a non-null value, compilation will abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.

A helpful error message can be returned like this:

Returns: `Any` validate of a string with an external command

##### Examples

###### **Usage**

```puppet

Defaults to end of path
  validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')

% as file location
  validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
```

### `validate_domain_name`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead.

#### `validate_domain_name(Any *$args)`

The validate_domain_name function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `validate_email_address`

Type: Ruby 4.x API

DEPRECATED.  Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead.

#### `validate_email_address(Any *$args)`

The validate_email_address function.

Returns: `Any`

##### `*args`

Data type: `Any`

### `validate_legacy`

Type: Ruby 4.x API

**Deprecated:** Validate a value against both the target_type (new).

#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`

The function checks a value against both the target_type (new).

Returns: `Any` A boolean value (`true` or `false`) returned from the called function.

##### `scope`

Data type: `Any`

The main value that will be passed to the method

##### `target_type`

Data type: `Type`



##### `function_name`

Data type: `String`

Unused

##### `value`

Data type: `Any`



##### `*args`

Data type: `Any`

Any additional values that are to be passed to the method

#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`

The validate_legacy function.

Returns: `Any` Legacy validation method

##### `scope`

Data type: `Any`

The main value that will be passed to the method

##### `type_string`

Data type: `String`



##### `function_name`

Data type: `String`

Unused

##### `value`

Data type: `Any`



##### `*args`

Data type: `Any`

Any additional values that are to be passed to the method

### `validate_x509_rsa_key_pair`

Type: Ruby 3.x API

Verifies that the certficate's signature was created from the
supplied key.

```validate_x509_rsa_key_pair($cert, $key)```

#### `validate_x509_rsa_key_pair()`

Verifies that the certficate's signature was created from the
supplied key.

```validate_x509_rsa_key_pair($cert, $key)```

Returns: `Any` Fail compilation if any value fails this check.

### <a name="values_at"></a>`values_at`

Type: Ruby 3.x API

The first argument is the array you want to analyze, and the second element can
be a combination of:

* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above

> *Note:*
Since Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.
A negative value is taken to be "from the end" of the array:

`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`
`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`
`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`

#### Examples

##### **Usage**

```puppet

values_at(['a','b','c'], 2)
Would return ['c']

values_at(['a','b','c'], ["0-1"])
Would return ['a','b']

values_at(['a','b','c','d','e'], [0, "2-3"])
Would return ['a','c','d']
```

#### `values_at()`

The first argument is the array you want to analyze, and the second element can
be a combination of:

* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above

> *Note:*
Since Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.
A negative value is taken to be "from the end" of the array:

`['a', 'b', 'c', 'd'][1, 2]`   results in `['b', 'c']`
`['a', 'b', 'c', 'd'][2, -1]`  results in `['c', 'd']`
`['a', 'b', 'c', 'd'][1, -2]`  results in `['b', 'c']`

Returns: `Any` an array of values identified by location

##### Examples

###### **Usage**

```puppet

values_at(['a','b','c'], 2)
Would return ['c']

values_at(['a','b','c'], ["0-1"])
Would return ['a','b']

values_at(['a','b','c','d','e'], [0, "2-3"])
Would return ['a','c','d']
```

### `zip`

Type: Ruby 3.x API

Takes one element from first array and merges corresponding elements from second array.

#### Examples

##### 

```puppet
zip(['1','2','3'],['4','5','6'])
Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
```

#### `zip()`

The zip function.

Returns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.

##### Examples

###### 

```puppet
zip(['1','2','3'],['4','5','6'])
Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
```

## Data types

### `Stdlib::Absolutepath`

A strict absolutepath type

Alias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`

### `Stdlib::Base32`

Type to match base32 String

Alias of `Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/]`

### `Stdlib::Base64`

Type to match base64 String

Alias of `Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/]`

### `Stdlib::CreateResources`

A type description used for the create_resources function

#### Examples

##### As a class parameter

```puppet
class myclass (
  Stdlib::CreateResources $myresources = {},
) {
  # Using create_resources
  create_resources('myresource', $myresources)

  # Using iteration
  $myresources.each |$myresource_name, $myresource_attrs| {
    myresource { $myresource_name:
      * => $myresource_attrs,
    }
  }
}
```

Alias of `Hash[String[1], Hash[String[1], Any]]`

### `Stdlib::Datasize`

Validate the size of data

Alias of `Pattern[/^\d+(?i:[kmgt]b?|b)$/]`

### `Stdlib::Dns::Zone`

Validate a DNS zone name

Alias of `Pattern[/\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)+|\.)\z/]`

### `Stdlib::Email`

https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
lint:ignore:140chars

Alias of `Pattern[/\A[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/]`

### `Stdlib::Ensure::File`

Validate the value of the ensure parameter for a file

Alias of `Enum['present', 'file', 'directory', 'link', 'absent']`

### `Stdlib::Ensure::File::Directory`

Validate the ensure parameter of a "directory" file resource

Alias of `Enum['directory', 'absent']`

### `Stdlib::Ensure::File::File`

Validate the ensure parameter of a "file" file resource

Alias of `Enum['file', 'absent']`

### `Stdlib::Ensure::File::Link`

Validate the ensure parameter of a "link" file resource

Alias of `Enum['link', 'absent']`

### `Stdlib::Ensure::Package`

Validate the value of the ensure parameter for a package

Alias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`

### `Stdlib::Ensure::Service`

Validate the value of the ensure parameter of a service resource

Alias of `Enum['stopped', 'running']`

### `Stdlib::Filemode`

See `man chmod.1` for the regular expression for symbolic mode
lint:ignore:140chars

Alias of `Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/]`

### `Stdlib::Filesource`

Validate the source parameter on file types

Alias of

```puppet
Variant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[
    /\Afile:\/\/\/([^\n\/\0]+(\/)?)+\z/,
    /\Apuppet:\/\/(([\w-]+\.?)+)?\/([^\n\/\0]+(\/)?)+\z/,
  ]]
```

### `Stdlib::Fqdn`

Validate a Fully Qualified Domain Name

Alias of `Pattern[/\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/]`

### `Stdlib::HTTPSUrl`

Validate a HTTPS URL

Alias of `Pattern[/(?i:\Ahttps:\/\/.*\z)/]`

### `Stdlib::HTTPUrl`

Validate a HTTP(S) URL

Alias of `Pattern[/(?i:\Ahttps?:\/\/.*\z)/]`

### `Stdlib::Host`

Validate a host (FQDN or IP address)

Alias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]`

### `Stdlib::Http::Method`

Valid HTTP method verbs

* **See also**
  * https://www.iana.org/assignments/http-methods/http-methods.xhtml

Alias of `Enum['ACL', 'BASELINE-CONTROL', 'BIND', 'CHECKIN', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LABEL', 'LINK', 'LOCK', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MKREDIRECTREF', 'MKWORKSPACE', 'MOVE', 'OPTIONS', 'ORDERPATCH', 'PATCH', 'POST', 'PRI', 'PROPFIND', 'PROPPATCH', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'TRACE', 'UNBIND', 'UNCHECKOUT', 'UNLINK', 'UNLOCK', 'UPDATE', 'UPDATEREDIRECTREF', 'VERSION-CONTROL']`

### `Stdlib::Http::Status`

A valid HTTP status code per RFC9110

* **See also**
  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes

Alias of `Integer[100, 599]`

### `Stdlib::HttpStatus`

Validate a HTTP status code

* **DEPRECATED** Use Stdlib::Http::Status

* **See also**
  * Stdlib::Http::Status

Alias of `Stdlib::Http::Status`

### `Stdlib::IP::Address`

Validate an IP address

Alias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`

### `Stdlib::IP::Address::CIDR`

Validate an IP address with subnet

Alias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]`

### `Stdlib::IP::Address::Nosubnet`

Validate an IP address without subnet

Alias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`

### `Stdlib::IP::Address::V4`

Validate an IPv4 address

Alias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`

### `Stdlib::IP::Address::V4::CIDR`

lint:ignore:140chars

Alias of `Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\/([0-9]|[12][0-9]|3[0-2])\z/]`

### `Stdlib::IP::Address::V4::Nosubnet`

lint:ignore:140chars

Alias of `Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]`

### `Stdlib::IP::Address::V6`

Validate an IPv6 address

Alias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`

### `Stdlib::IP::Address::V6::Alternative`

lint:ignore:140chars

Alias of `Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`

### `Stdlib::IP::Address::V6::CIDR`

lint:ignore:140chars

Alias of `Pattern[/\A((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])?\z/]`

### `Stdlib::IP::Address::V6::Compressed`

Validate a compressed IPv6 address

Alias of `Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){7}:(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`

### `Stdlib::IP::Address::V6::Full`

Validate a full IPv6 address

Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`

### `Stdlib::IP::Address::V6::Nosubnet`

Validate an IPv6 address without subnet

Alias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`

### `Stdlib::IP::Address::V6::Nosubnet::Alternative`

lint:ignore:140chars

Alias of `Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]`

### `Stdlib::IP::Address::V6::Nosubnet::Compressed`

Validate compressed IPv6 address without subnet

Alias of `Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})\z/, /\A([[:xdigit:]]{1,4}:){7}:\z/]`

### `Stdlib::IP::Address::V6::Nosubnet::Full`

Validate full IPv6 address without subnet

Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/]`

### `Stdlib::MAC`

A type for a MAC address

Alias of `Pattern[/\A([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\z/, /\A([0-9A-Fa-f]{2}[:-]){19}([0-9A-Fa-f]{2})\z/]`

### `Stdlib::ObjectStore`

Validate an ObjectStore

Alias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`

### `Stdlib::ObjectStore::GSUri`

Validate a Google Cloud object store URI

Alias of `Pattern[/\Ags:\/\/.*\z/]`

### `Stdlib::ObjectStore::S3Uri`

Validate an Amazon Web Services S3 object store URI

Alias of `Pattern[/\As3:\/\/.*\z/]`

### `Stdlib::Port`

Validate a port number

Alias of `Integer[0, 65535]`

### `Stdlib::Port::Dynamic`

Validate a dynamic port number

Alias of `Integer[49152, 65535]`

### `Stdlib::Port::Ephemeral`

Validate an ephemeral port number

Alias of `Stdlib::Port::Dynamic`

### `Stdlib::Port::Privileged`

Validate a priviliged port number

Alias of `Integer[1, 1023]`

### `Stdlib::Port::Registered`

Validate a registered port number

Alias of `Stdlib::Port::User`

### `Stdlib::Port::Unprivileged`

Validate an unprivileged port number

Alias of `Integer[1024, 65535]`

### `Stdlib::Port::User`

Validate a port number usable by a user

Alias of `Integer[1024, 49151]`

### `Stdlib::Syslogfacility`

Validate a syslog facility

Alias of `Enum['kern', 'user', 'mail', 'daemon', 'auth', 'syslog', 'lpr', 'news', 'uucp', 'cron', 'authpriv', 'ftp', 'ntp', 'security', 'console', 'solaris-cron', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5', 'local6', 'local7']`

### `Stdlib::Unixpath`

this regex rejects any path component that does not start with "/" or is NUL

Alias of `Pattern[/\A\/([^\n\/\0]+\/*)*\z/]`

### `Stdlib::Windowspath`

Validate a Windows path

Alias of `Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/]`

### `Stdlib::Yes_no`

Validate a yes / no value

Alias of `Pattern[/\A(?i:(yes|no))\z/]`

