dev/provisioning/modules/stdlib/README.markdown
changeset 28 b0b56e0f8c7f
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     1 #stdlib
       
     2 
       
     3 ####Table of Contents
       
     4 
       
     5 1. [Overview](#overview)
       
     6 2. [Module Description - What the module does and why it is useful](#module-description)
       
     7 3. [Setup - The basics of getting started with stdlib](#setup)
       
     8 4. [Usage - Configuration options and additional functionality](#usage)
       
     9 5. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
       
    10 5. [Limitations - OS compatibility, etc.](#limitations)
       
    11 6. [Development - Guide for contributing to the module](#development)
       
    12 
       
    13 ##Overview
       
    14 
       
    15 Adds a standard library of resources for Puppet modules.
       
    16 
       
    17 ##Module Description
       
    18 
       
    19 This module provides a standard library of resources for the development of Puppet modules. Puppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:
       
    20 
       
    21  * Stages
       
    22  * Facts
       
    23  * Functions
       
    24  * Defined resource types
       
    25  * Types
       
    26  * Providers
       
    27 
       
    28 > *Note:* As of version 3.7, Puppet Enterprise no longer includes the stdlib module. If you're running Puppet Enterprise, you should install the most recent release of stdlib for compatibility with Puppet modules.
       
    29 
       
    30 ##Setup
       
    31 
       
    32 Installing the stdlib module adds the functions, facts, and resources of this standard library to Puppet.
       
    33 
       
    34 ##Usage
       
    35 
       
    36 After you've installed stdlib, all of its functions, facts, and resources are available for module use or development.
       
    37 
       
    38 If you want to use a standardized set of run stages for Puppet, `include stdlib` in your manifest.
       
    39 
       
    40 * `stdlib`: Most of stdlib's features are automatically loaded by Puppet. To use standardized run stages in Puppet, declare this class in your manifest with `include stdlib`.
       
    41 
       
    42   When declared, stdlib declares all other classes in the module. The only other class currently included in the module is `stdlib::stages`.
       
    43 
       
    44 The `stdlib::stages` class declares various run stages for deploying infrastructure, language runtimes, and application layers. The high level stages are (in order):
       
    45 
       
    46   * setup
       
    47   * main
       
    48   * runtime
       
    49   * setup_infra
       
    50   * deploy_infra
       
    51   * setup_app
       
    52   * deploy_app
       
    53   * deploy
       
    54 
       
    55   Sample usage:
       
    56 
       
    57   ~~~
       
    58   node default {
       
    59     include stdlib
       
    60     class { java: stage => 'runtime' }
       
    61   }
       
    62   ~~~
       
    63 
       
    64 ## Reference
       
    65 
       
    66 ### Classes
       
    67 
       
    68 #### Public Classes
       
    69 
       
    70   The stdlib class has no parameters.
       
    71 
       
    72 #### Private Classes
       
    73 
       
    74 * `stdlib::stages`: Manages a standard set of run stages for Puppet. It is managed by the stdlib class and should not be declared independently.
       
    75 
       
    76 ### Types
       
    77 
       
    78 #### `file_line`
       
    79  Ensures that a given line, including whitespace at the beginning and end, is contained within a file. If the line is not contained in the given file, Puppet will add the line. Multiple resources can be declared to manage multiple lines in the same file. You can also use `match` to replace existing lines.
       
    80 
       
    81   ~~~
       
    82   file_line { 'sudo_rule':
       
    83     path => '/etc/sudoers',
       
    84     line => '%sudo ALL=(ALL) ALL',
       
    85   }
       
    86   file_line { 'sudo_rule_nopw':
       
    87     path => '/etc/sudoers',
       
    88     line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
       
    89   }
       
    90   ~~~
       
    91 
       
    92 ##### Parameters
       
    93 All parameters are optional, unless otherwise noted.
       
    94 
       
    95 * `after`: Specifies the line after which Puppet will add any new lines. (Existing lines are added in place.) Valid options: String. Default: Undefined.
       
    96 * `ensure`: Ensures whether the resource is present. Valid options: 'present', 'absent'. Default: 'present'.
       
    97 * `line`: **Required.** Sets the line to be added to the file located by the `path` parameter. Valid options: String. Default: Undefined.
       
    98 * `match`: Specifies a regular expression to run against existing lines in the file; if a match is found, it is replaced rather than adding a new line. Valid options: String containing a regex. Default: Undefined.
       
    99 * `multiple`: Determines if `match` and/or `after` can change multiple lines. If set to false, an exception will be raised if more than one line matches. Valid options: 'true', 'false'. Default: Undefined.
       
   100 * `name`: Sets the name to use as the identity of the resource. This is necessary if you want the resource namevar to differ from the supplied `title` of the resource. Valid options: String. Default: Undefined.
       
   101 * `path`: **Required.** Defines the file in which Puppet will ensure the line specified by `line`. Must be an absolute path to the file.
       
   102 * `replace`: Defines whether the resource will overwrite an existing line that matches the `match` parameter. If set to false and a line is found matching the `match` param, the line will not be placed in the file. Valid options: true, false, yes, no. Default: true
       
   103 
       
   104 
       
   105 ### Functions
       
   106 
       
   107 #### `abs`
       
   108 
       
   109 Returns the absolute value of a number; for example, '-34.56' becomes '34.56'. Takes a single integer and float value as an argument. *Type*: rvalue.
       
   110 
       
   111 #### `any2array`
       
   112 
       
   113 Converts any object to an array containing that object. Empty argument lists are converted to an empty array. Arrays are left untouched. Hashes are converted to arrays of alternating keys and values. *Type*: rvalue.
       
   114 
       
   115 #### `base64`
       
   116 
       
   117 Converts a string to and from base64 encoding. Requires an action ('encode', 'decode') and either a plain or base64-encoded string. *Type*: rvalue.
       
   118 
       
   119 #### `basename`
       
   120 
       
   121 Returns the `basename` of a path (optionally stripping an extension). For example:
       
   122   * ('/path/to/a/file.ext') returns 'file.ext'
       
   123   * ('relative/path/file.ext') returns 'file.ext'
       
   124   * ('/path/to/a/file.ext', '.ext') returns 'file'
       
   125 
       
   126 *Type*: rvalue.
       
   127 
       
   128 #### `bool2num`
       
   129 
       
   130 Converts a boolean to a number. Converts values:
       
   131   * 'false', 'f', '0', 'n', and 'no' to 0.
       
   132   * 'true', 't', '1', 'y', and 'yes' to 1.
       
   133   Requires a single boolean or string as an input. *Type*: rvalue.
       
   134 
       
   135 #### `capitalize`
       
   136 
       
   137 Capitalizes the first letter of a string or array of strings. Requires either a single string or an array as an input. *Type*: rvalue.
       
   138 
       
   139 #### `ceiling`
       
   140 
       
   141 Returns the smallest integer greater than or equal to the argument. Takes a single numeric value as an argument. *Type*: rvalue.
       
   142 
       
   143 #### `chomp`
       
   144 
       
   145 Removes the record separator from the end of a string or an array of strings; for example, 'hello\n' becomes 'hello'. Requires a single string or array as an input. *Type*: rvalue.
       
   146 
       
   147 #### `chop`
       
   148 
       
   149 Returns a new string with the last character removed. If the string ends with '\r\n', both characters are removed. Applying `chop` to an empty string returns an empty string. If you want to merely remove record separators, then you should use the `chomp` function. Requires a string or an array of strings as input. *Type*: rvalue.
       
   150 
       
   151 #### `concat`
       
   152 
       
   153 Appends the contents of multiple arrays onto the first array given. For example:
       
   154   * `concat(['1','2','3'],'4')` returns ['1','2','3','4'].
       
   155   * `concat(['1','2','3'],'4',['5','6','7'])` returns ['1','2','3','4','5','6','7'].
       
   156   *Type*: rvalue.
       
   157 
       
   158 #### `convert_base`
       
   159 
       
   160 Converts a given integer or base 10 string representing an integer to a specified base, as a string. For example:
       
   161   * `convert_base(5, 2)` results in: '101'
       
   162   * `convert_base('254', '16')` results in: 'fe'
       
   163 
       
   164 #### `count`
       
   165 
       
   166 If called with only an array, it counts the number of elements that are **not** nil/undef. If called with a second argument, counts the number of elements in an array that matches the second argument. *Type*: rvalue.
       
   167 
       
   168 #### `defined_with_params`
       
   169 
       
   170 Takes a resource reference and an optional hash of attributes. Returns 'true' if a resource with the specified attributes has already been added to the catalog. Returns 'false' otherwise.
       
   171 
       
   172   ~~~
       
   173   user { 'dan':
       
   174     ensure => present,
       
   175   }
       
   176 
       
   177   if ! defined_with_params(User[dan], {'ensure' => 'present' }) {
       
   178     user { 'dan': ensure => present, }
       
   179   }
       
   180   ~~~
       
   181 
       
   182 *Type*: rvalue.
       
   183 
       
   184 #### `delete`
       
   185 
       
   186 Deletes all instances of a given element from an array, substring from a string, or key from a hash. For example, `delete(['a','b','c','b'], 'b')` returns ['a','c']; `delete('abracadabra', 'bra')` returns 'acada'. `delete({'a' => 1,'b' => 2,'c' => 3},['b','c'])` returns {'a'=> 1}. *Type*: rvalue.
       
   187 
       
   188 #### `delete_at`
       
   189 
       
   190 Deletes a determined indexed value from an array. For example, `delete_at(['a','b','c'], 1)` returns ['a','c']. *Type*: rvalue.
       
   191 
       
   192 #### `delete_values`
       
   193 
       
   194 Deletes all instances of a given value from a hash. For example, `delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')` returns {'a'=>'A','c'=>'C','B'=>'D'} *Type*: rvalue.
       
   195 
       
   196 #### `delete_undef_values`
       
   197 
       
   198 Deletes all instances of the undef value from an array or hash. For example, `$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})` returns {a => 'A', b => '', d => false}. *Type*: rvalue.
       
   199 
       
   200 #### `difference`
       
   201 
       
   202 Returns the difference between two arrays. The returned array is a copy of the original array, removing any items that also appear in the second array. For example, `difference(["a","b","c"],["b","c","d"])` returns ["a"]. *Type*: rvalue.
       
   203 
       
   204 #### `dirname`
       
   205 
       
   206 Returns the `dirname` of a path. For example, `dirname('/path/to/a/file.ext')` returns '/path/to/a'. *Type*: rvalue.
       
   207 
       
   208 #### `dos2unix`
       
   209 
       
   210 Returns the Unix version of the given string. Very useful when using a File resource with a cross-platform template. *Type*: rvalue.
       
   211 
       
   212 ~~~
       
   213 file{$config_file:
       
   214   ensure  => file,
       
   215   content => dos2unix(template('my_module/settings.conf.erb')),
       
   216 }
       
   217 ~~~
       
   218 
       
   219 See also [unix2dos](#unix2dos).
       
   220 
       
   221 #### `downcase`
       
   222 
       
   223 Converts the case of a string or of all strings in an array to lowercase. *Type*: rvalue.
       
   224 
       
   225 #### `empty`
       
   226 
       
   227 Returns 'true' if the variable is empty. *Type*: rvalue.
       
   228 
       
   229 #### `ensure_packages`
       
   230 
       
   231 Takes a list of packages and only installs them if they don't already exist. It optionally takes a hash as a second parameter to be passed as the third argument to the `ensure_resource()` function. *Type*: statement.
       
   232 
       
   233 #### `ensure_resource`
       
   234 
       
   235 Takes a resource type, title, and a hash of attributes that describe the resource(s).
       
   236 
       
   237 ~~~
       
   238 user { 'dan':
       
   239   ensure => present,
       
   240 }
       
   241 ~~~
       
   242 
       
   243 This example only creates the resource if it does not already exist:
       
   244 
       
   245   `ensure_resource('user', 'dan', {'ensure' => 'present' })`
       
   246 
       
   247 If the resource already exists, but does not match the specified parameters, this function attempts to recreate the resource, leading to a duplicate resource definition error.
       
   248 
       
   249 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.
       
   250 
       
   251   `ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})`
       
   252 
       
   253 *Type*: statement.
       
   254 
       
   255 #### `flatten`
       
   256 
       
   257 Flattens deeply nested arrays and returns a single flat array as a result. For example, `flatten(['a', ['b', ['c']]])` returns ['a','b','c']. *Type*: rvalue.
       
   258 
       
   259 #### `floor`
       
   260 
       
   261 Takes a single numeric value as an argument, and returns the largest integer less than or equal to the argument. *Type*: rvalue.
       
   262 
       
   263 #### `fqdn_rand_string`
       
   264 
       
   265 Generates a random alphanumeric string using an optionally-specified character set (default is alphanumeric), combining the `$fqdn` fact and an optional seed for repeatable randomness.
       
   266 
       
   267 *Usage:*
       
   268 ~~~
       
   269 fqdn_rand_string(LENGTH, [CHARSET], [SEED])
       
   270 ~~~
       
   271 *Examples:*
       
   272 ~~~
       
   273 fqdn_rand_string(10)
       
   274 fqdn_rand_string(10, 'ABCDEF!@#$%^')
       
   275 fqdn_rand_string(10, '', 'custom seed')
       
   276 ~~~
       
   277 
       
   278 *Type*: rvalue.
       
   279 
       
   280 #### `fqdn_rotate`
       
   281 
       
   282 Rotates an array or string a random number of times, combining the `$fqdn` fact and an optional seed for repeatable randomness.
       
   283 
       
   284 *Usage:*
       
   285 ~~~
       
   286 fqdn_rotate(VALUE, [SEED])
       
   287 ~~~
       
   288 *Examples:*
       
   289 ~~~
       
   290 fqdn_rotate(['a', 'b', 'c', 'd'])
       
   291 fqdn_rotate('abcd')
       
   292 fqdn_rotate([1, 2, 3], 'custom seed')
       
   293 ~~~
       
   294 
       
   295 *Type*: rvalue.
       
   296 
       
   297 #### `get_module_path`
       
   298 
       
   299 Returns the absolute path of the specified module for the current environment.
       
   300 
       
   301   `$module_path = get_module_path('stdlib')`
       
   302 
       
   303 *Type*: rvalue.
       
   304 
       
   305 #### `getparam`
       
   306 
       
   307 Takes a resource reference and the name of the parameter, and returns the value of the resource's parameter.
       
   308 
       
   309 For example, the following returns 'param_value':
       
   310 
       
   311   ~~~
       
   312   define example_resource($param) {
       
   313   }
       
   314 
       
   315   example_resource { "example_resource_instance":
       
   316     param => "param_value"
       
   317   }
       
   318 
       
   319   getparam(Example_resource["example_resource_instance"], "param")
       
   320   ~~~
       
   321 
       
   322 *Type*: rvalue.
       
   323 
       
   324 #### `getvar`
       
   325 
       
   326 Looks up a variable in a remote namespace.
       
   327 
       
   328 For example:
       
   329 
       
   330   ~~~
       
   331   $foo = getvar('site::data::foo')
       
   332   # Equivalent to $foo = $site::data::foo
       
   333   ~~~
       
   334 
       
   335 This is useful if the namespace itself is stored in a string:
       
   336 
       
   337   ~~~
       
   338   $datalocation = 'site::data'
       
   339   $bar = getvar("${datalocation}::bar")
       
   340   # Equivalent to $bar = $site::data::bar
       
   341   ~~~
       
   342 
       
   343 *Type*: rvalue.
       
   344 
       
   345 #### `grep`
       
   346 
       
   347 Searches through an array and returns any elements that match the provided regular expression. For example, `grep(['aaa','bbb','ccc','aaaddd'], 'aaa')` returns ['aaa','aaaddd']. *Type*: rvalue.
       
   348 
       
   349 #### `has_interface_with`
       
   350 
       
   351 Returns a boolean based on kind and value:
       
   352   * macaddress
       
   353   * netmask
       
   354   * ipaddress
       
   355   * network
       
   356 
       
   357 *Examples:*
       
   358 
       
   359   ~~~
       
   360   has_interface_with("macaddress", "x:x:x:x:x:x")
       
   361   has_interface_with("ipaddress", "127.0.0.1")    => true
       
   362   ~~~
       
   363 
       
   364 If no kind is given, then the presence of the interface is checked:
       
   365 
       
   366   ~~~
       
   367   has_interface_with("lo")                        => true
       
   368   ~~~
       
   369 
       
   370 *Type*: rvalue.
       
   371 
       
   372 #### `has_ip_address`
       
   373 
       
   374 Returns 'true' if the client has the requested IP address on some interface. This function iterates through the `interfaces` fact and checks the `ipaddress_IFACE` facts, performing a simple string comparison. *Type*: rvalue.
       
   375 
       
   376 #### `has_ip_network`
       
   377 
       
   378 Returns 'true' if the client has an IP address within the requested network. This function iterates through the `interfaces` fact and checks the `network_IFACE` facts, performing a simple string comparision. *Type*: rvalue.
       
   379 
       
   380 #### `has_key`
       
   381 
       
   382 Determines if a hash has a certain key value.
       
   383 
       
   384 *Example*:
       
   385 
       
   386   ~~~
       
   387   $my_hash = {'key_one' => 'value_one'}
       
   388   if has_key($my_hash, 'key_two') {
       
   389     notice('we will not reach here')
       
   390   }
       
   391   if has_key($my_hash, 'key_one') {
       
   392     notice('this will be printed')
       
   393   }
       
   394   ~~~
       
   395 
       
   396 *Type*: rvalue.
       
   397 
       
   398 #### `hash`
       
   399 
       
   400 Converts an array into a hash. For example, `hash(['a',1,'b',2,'c',3])` returns {'a'=>1,'b'=>2,'c'=>3}. *Type*: rvalue.
       
   401 
       
   402 #### `intersection`
       
   403 
       
   404 Returns an array an intersection of two. For example, `intersection(["a","b","c"],["b","c","d"])` returns ["b","c"]. *Type*: rvalue.
       
   405 
       
   406 #### `is_array`
       
   407 
       
   408 Returns 'true' if the variable passed to this function is an array. *Type*: rvalue.
       
   409 
       
   410 #### `is_bool`
       
   411 
       
   412 Returns 'true' if the variable passed to this function is a boolean. *Type*: rvalue.
       
   413 
       
   414 #### `is_domain_name`
       
   415 
       
   416 Returns 'true' if the string passed to this function is a syntactically correct domain name. *Type*: rvalue.
       
   417 
       
   418 #### `is_float`
       
   419 
       
   420 Returns 'true' if the variable passed to this function is a float. *Type*: rvalue.
       
   421 
       
   422 #### `is_function_available`
       
   423 
       
   424 Accepts a string as an argument and determines whether the Puppet runtime has access to a function by that name. It returns 'true' if the function exists, 'false' if not. *Type*: rvalue.
       
   425 
       
   426 #### `is_hash`
       
   427 
       
   428 Returns 'true' if the variable passed to this function is a hash. *Type*: rvalue.
       
   429 
       
   430 #### `is_integer`
       
   431 
       
   432 Returns 'true' if the variable returned to this string is an integer. *Type*: rvalue.
       
   433 
       
   434 #### `is_ip_address`
       
   435 
       
   436 Returns 'true' if the string passed to this function is a valid IP address. *Type*: rvalue.
       
   437 
       
   438 #### `is_mac_address`
       
   439 
       
   440 Returns 'true' if the string passed to this function is a valid MAC address. *Type*: rvalue.
       
   441 
       
   442 #### `is_numeric`
       
   443 
       
   444 Returns 'true' if the variable passed to this function is a number. *Type*: rvalue.
       
   445 
       
   446 #### `is_string`
       
   447 
       
   448 Returns 'true' if the variable passed to this function is a string. *Type*: rvalue.
       
   449 
       
   450 #### `join`
       
   451 
       
   452 Joins an array into a string using a separator. For example, `join(['a','b','c'], ",")` results in: "a,b,c". *Type*: rvalue.
       
   453 
       
   454 #### `join_keys_to_values`
       
   455 
       
   456 Joins each key of a hash to that key's corresponding value with a separator. Keys and values are cast to strings. The return value is an array in which each element is one joined key/value pair. For example, `join_keys_to_values({'a'=>1,'b'=>2}, " is ")` results in ["a is 1","b is 2"]. *Type*: rvalue.
       
   457 
       
   458 #### `keys`
       
   459 
       
   460 Returns the keys of a hash as an array. *Type*: rvalue.
       
   461 
       
   462 #### `loadyaml`
       
   463 
       
   464 Loads a YAML file containing an array, string, or hash, and returns the data in the corresponding native data type. For example:
       
   465 
       
   466   ~~~
       
   467   $myhash = loadyaml('/etc/puppet/data/myhash.yaml')
       
   468   ~~~
       
   469 
       
   470 *Type*: rvalue.
       
   471 
       
   472 #### `load_module_metadata`
       
   473 
       
   474 Loads the metadata.json of a target module. Can be used to determine module version and authorship for dynamic support of modules.
       
   475 
       
   476   ~~~
       
   477   $metadata = load_module_metadata('archive')
       
   478   notify { $metadata['author']: }
       
   479   ~~~
       
   480 
       
   481 *Type*: rvalue.
       
   482 
       
   483 #### `lstrip`
       
   484 
       
   485 Strips spaces to the left of a string. *Type*: rvalue.
       
   486 
       
   487 #### `max`
       
   488 
       
   489 Returns the highest value of all arguments. Requires at least one argument. *Type*: rvalue.
       
   490 
       
   491 #### `member`
       
   492 
       
   493 This function determines if a variable is a member of an array. The variable can be either a string, array, or fixnum. For example, `member(['a','b'], 'b')` and `member(['a','b','c'], ['b','c'])` return 'true', while `member(['a','b'], 'c')` and `member(['a','b','c'], ['c','d'])` return 'false'. *Note*: This function does not support nested arrays. If the first argument contains nested arrays, it will not recurse through them.
       
   494 
       
   495 *Type*: rvalue.
       
   496 
       
   497 #### `merge`
       
   498 
       
   499 Merges two or more hashes together and returns the resulting hash.
       
   500 
       
   501 *Example*:
       
   502 
       
   503   ~~~
       
   504   $hash1 = {'one' => 1, 'two' => 2}
       
   505   $hash2 = {'two' => 'dos', 'three' => 'tres'}
       
   506   $merged_hash = merge($hash1, $hash2)
       
   507   # The resulting hash is equivalent to:
       
   508   # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
       
   509   ~~~
       
   510 
       
   511 When there is a duplicate key, the key in the rightmost hash "wins." *Type*: rvalue.
       
   512 
       
   513 #### `min`
       
   514 
       
   515 Returns the lowest value of all arguments. Requires at least one argument. *Type*: rvalue.
       
   516 
       
   517 #### `num2bool`
       
   518 
       
   519 Converts a number or a string representation of a number into a true boolean. Zero or anything non-numeric becomes 'false'. Numbers greater than 0 become 'true'. *Type*: rvalue.
       
   520 
       
   521 #### `parsejson`
       
   522 
       
   523 Converts a string of JSON into the correct Puppet structure. *Type*: rvalue.
       
   524 
       
   525 #### `parseyaml`
       
   526 
       
   527 Converts a string of YAML into the correct Puppet structure. *Type*: rvalue.
       
   528 
       
   529 #### `pick`
       
   530 
       
   531 From a list of values, returns the first value that is not undefined or an empty string. Takes any number of arguments, and raises an error if all values are undefined or empty.
       
   532 
       
   533   ~~~
       
   534   $real_jenkins_version = pick($::jenkins_version, '1.449')
       
   535   ~~~
       
   536 
       
   537 *Type*: rvalue.
       
   538 
       
   539 #### `prefix`
       
   540 
       
   541 Applies a prefix to all elements in an array, or to the keys in a hash.
       
   542 For example:
       
   543 * `prefix(['a','b','c'], 'p')` returns ['pa','pb','pc']
       
   544 * `prefix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')` returns {'pa'=>'b','pb'=>'c','pc'=>'d'}.
       
   545 
       
   546 *Type*: rvalue.
       
   547 
       
   548 #### `assert_private`
       
   549 
       
   550 Sets the current class or definition as private. Calling the class or definition from outside the current module will fail.
       
   551 
       
   552 For example, `assert_private()` called in class `foo::bar` outputs the following message if class is called from outside module `foo`:
       
   553 
       
   554   ~~~
       
   555   Class foo::bar is private
       
   556   ~~~
       
   557 
       
   558   To specify the error message you want to use:
       
   559 
       
   560   ~~~
       
   561   assert_private("You're not supposed to do that!")
       
   562   ~~~
       
   563 
       
   564 *Type*: statement.
       
   565 
       
   566 #### `pw_hash`
       
   567 
       
   568 Hashes a password using the crypt function. Provides a hash usable on most POSIX systems.
       
   569 
       
   570 The first argument to this function is the password to hash. If it is undef or an empty string, this function returns undef.
       
   571 
       
   572 The second argument to this function is which type of hash to use. It will be converted into the appropriate crypt(3) hash specifier. Valid hash types are:
       
   573 
       
   574 |Hash type            |Specifier|
       
   575 |---------------------|---------|
       
   576 |MD5                  |1        |
       
   577 |SHA-256              |5        |
       
   578 |SHA-512 (recommended)|6        |
       
   579 
       
   580 The third argument to this function is the salt to use.
       
   581 
       
   582 *Type*: rvalue.
       
   583 
       
   584 **Note:** this uses the Puppet master's implementation of crypt(3). If your environment contains several different operating systems, ensure that they are compatible before using this function.
       
   585 
       
   586 #### `range`
       
   587 
       
   588 Extrapolates a range as an array when given in the form of '(start, stop)'. For example, `range("0", "9")` returns [0,1,2,3,4,5,6,7,8,9]. Zero-padded strings are converted to integers automatically, so `range("00", "09")` returns [0,1,2,3,4,5,6,7,8,9].
       
   589 
       
   590 Non-integer strings are accepted; `range("a", "c")` returns ["a","b","c"], and `range("host01", "host10")` returns ["host01", "host02", ..., "host09", "host10"].
       
   591 
       
   592 Passing a third argument will cause the generated range to step by that interval, e.g. `range("0", "9", "2")` returns ["0","2","4","6","8"].
       
   593 
       
   594 *Type*: rvalue.
       
   595 
       
   596 #### `reject`
       
   597 
       
   598 Searches through an array and rejects all elements that match the provided regular expression. For example, `reject(['aaa','bbb','ccc','aaaddd'], 'aaa')` returns ['bbb','ccc']. *Type*: rvalue.
       
   599 
       
   600 #### `reverse`
       
   601 
       
   602 Reverses the order of a string or array. *Type*: rvalue.
       
   603 
       
   604 #### `rstrip`
       
   605 
       
   606 Strips spaces to the right of the string. *Type*: rvalue.
       
   607 
       
   608 #### `shuffle`
       
   609 
       
   610 Randomizes the order of a string or array elements. *Type*: rvalue.
       
   611 
       
   612 #### `size`
       
   613 
       
   614 Returns the number of elements in a string, an array or a hash. *Type*: rvalue.
       
   615 
       
   616 #### `sort`
       
   617 
       
   618 Sorts strings and arrays lexically. *Type*: rvalue.
       
   619 
       
   620 #### `squeeze`
       
   621 
       
   622 Returns a new string where runs of the same character that occur in this set are replaced by a single character. *Type*: rvalue.
       
   623 
       
   624 #### `str2bool`
       
   625 
       
   626 Converts a string to a boolean. This attempts to convert strings that contain values such as '1', 't', 'y', and 'yes' to 'true' and strings that contain values such as '0', 'f', 'n', and 'no' to 'false'. *Type*: rvalue.
       
   627 
       
   628 #### `str2saltedsha512`
       
   629 
       
   630 Converts a string to a salted-SHA512 password hash, used for OS X versions >= 10.7. Given any string, this function returns a hex version of a salted-SHA512 password hash, which can be inserted into your Puppet
       
   631 manifests as a valid password attribute. *Type*: rvalue.
       
   632 
       
   633 #### `strftime`
       
   634 
       
   635 Returns formatted time. For example, `strftime("%s")` returns the time since Unix epoch, and `strftime("%Y-%m-%d")` returns the date. *Type*: rvalue.
       
   636 
       
   637   *Format:*
       
   638 
       
   639     * `%a`: The abbreviated weekday name ('Sun')
       
   640     * `%A`: The full weekday name ('Sunday')
       
   641     * `%b`: The abbreviated month name ('Jan')
       
   642     * `%B`: The full month name ('January')
       
   643     * `%c`: The preferred local date and time representation
       
   644     * `%C`: Century (20 in 2009)
       
   645     * `%d`: Day of the month (01..31)
       
   646     * `%D`: Date (%m/%d/%y)
       
   647     * `%e`: Day of the month, blank-padded ( 1..31)
       
   648     * `%F`: Equivalent to %Y-%m-%d (the ISO 8601 date format)
       
   649     * `%h`: Equivalent to %b
       
   650     * `%H`: Hour of the day, 24-hour clock (00..23)
       
   651     * `%I`: Hour of the day, 12-hour clock (01..12)
       
   652     * `%j`: Day of the year (001..366)
       
   653     * `%k`: Hour, 24-hour clock, blank-padded ( 0..23)
       
   654     * `%l`: Hour, 12-hour clock, blank-padded ( 0..12)
       
   655     * `%L`: Millisecond of the second (000..999)
       
   656     * `%m`: Month of the year (01..12)
       
   657     * `%M`: Minute of the hour (00..59)
       
   658     * `%n`: Newline (\n)
       
   659     * `%N`: Fractional seconds digits, default is 9 digits (nanosecond)
       
   660       * `%3N`: Millisecond (3 digits)
       
   661       * `%6N`: Microsecond (6 digits)
       
   662       * `%9N`: Nanosecond (9 digits)
       
   663     * `%p`: Meridian indicator ('AM' or 'PM')
       
   664     * `%P`: Meridian indicator ('am' or 'pm')
       
   665     * `%r`: Time, 12-hour (same as %I:%M:%S %p)
       
   666     * `%R`: Time, 24-hour (%H:%M)
       
   667     * `%s`: Number of seconds since the Unix epoch, 1970-01-01 00:00:00 UTC.
       
   668     * `%S`: Second of the minute (00..60)
       
   669     * `%t`: Tab character (	)
       
   670     * `%T`: Time, 24-hour (%H:%M:%S)
       
   671     * `%u`: Day of the week as a decimal, Monday being 1. (1..7)
       
   672     * `%U`: Week number of the current year, starting with the first Sunday as the first day of the first week (00..53)
       
   673     * `%v`: VMS date (%e-%b-%Y)
       
   674     * `%V`: Week number of year according to ISO 8601 (01..53)
       
   675     * `%W`: Week number of the current year, starting with the first Monday as the first day of the first week (00..53)
       
   676     * `%w`: Day of the week (Sunday is 0, 0..6)
       
   677     * `%x`: Preferred representation for the date alone, no time
       
   678     * `%X`: Preferred representation for the time alone, no date
       
   679     * `%y`: Year without a century (00..99)
       
   680     * `%Y`: Year with century
       
   681     * `%z`: Time zone as hour offset from UTC (e.g. +0900)
       
   682     * `%Z`: Time zone name
       
   683     * `%%`: Literal '%' character
       
   684 
       
   685 #### `strip`
       
   686 
       
   687 Removes leading and trailing whitespace from a string or from every string inside an array. For example, `strip("    aaa   ")` results in "aaa". *Type*: rvalue.
       
   688 
       
   689 #### `suffix`
       
   690 
       
   691 Applies a suffix to all elements in an array. For example, `suffix(['a','b','c'], 'p')` returns ['ap','bp','cp']. *Type*: rvalue.
       
   692 
       
   693 #### `swapcase`
       
   694 
       
   695 Swaps the existing case of a string. For example, `swapcase("aBcD")` results in "AbCd". *Type*: rvalue.
       
   696 
       
   697 #### `time`
       
   698 
       
   699 Returns the current Unix epoch time as an integer. For example, `time()` returns something like '1311972653'. *Type*: rvalue.
       
   700 
       
   701 #### `to_bytes`
       
   702 
       
   703 Converts the argument into bytes, for example "4 kB" becomes "4096". Takes a single string value as an argument. *Type*: rvalue.
       
   704 
       
   705 #### `try_get_value`
       
   706 
       
   707 *Type*: rvalue.
       
   708 
       
   709 Looks up into a complex structure of arrays and hashes and returns a value
       
   710 or the default value if nothing was found.
       
   711 
       
   712 Key can contain slashes to describe path components. The function will go down
       
   713 the structure and try to extract the required value.
       
   714 
       
   715 $data = {
       
   716   'a' => {
       
   717     'b' => [
       
   718       'b1',
       
   719       'b2',
       
   720       'b3',
       
   721     ]
       
   722   }
       
   723 }
       
   724 
       
   725 $value = try_get_value($data, 'a/b/2', 'not_found', '/')
       
   726 => $value = 'b3'
       
   727 
       
   728 a -> first hash key
       
   729 b -> second hash key
       
   730 2 -> array index starting with 0
       
   731 
       
   732 not_found -> (optional) will be returned if there is no value or the path did not match. Defaults to nil.
       
   733 / -> (optional) path delimiter. Defaults to '/'.
       
   734 
       
   735 In addition to the required "key" argument, "try_get_value" accepts default
       
   736 argument. It will be returned if no value was found or a path component is
       
   737 missing. And the fourth argument can set a variable path separator.
       
   738 
       
   739 #### `type3x`
       
   740 
       
   741 Returns a string description of the type when passed a value. Type can be a string, array, hash, float, integer, or boolean. This function will be removed when Puppet 3 support is dropped and the new type system can be used. *Type*: rvalue.
       
   742 
       
   743 #### `type_of`
       
   744 
       
   745 Returns the literal type when passed a value. Requires the new parser. Useful for comparison of types with `<=` such as in `if type_of($some_value) <= Array[String] { ... }` (which is equivalent to `if $some_value =~ Array[String] { ... }`) *Type*: rvalue.
       
   746 
       
   747 #### `union`
       
   748 
       
   749 Returns a union of two or more arrays, without duplicates. For example, `union(["a","b","c"],["b","c","d"])` returns ["a","b","c","d"]. *Type*: rvalue.
       
   750 
       
   751 #### `unique`
       
   752 
       
   753 Removes duplicates from strings and arrays. For example, `unique("aabbcc")` returns 'abc', and `unique(["a","a","b","b","c","c"])` returns ["a","b","c"]. *Type*: rvalue.
       
   754 
       
   755 #### `unix2dos`
       
   756 
       
   757 Returns the DOS version of the given string. Very useful when using a File resource with a cross-platform template. *Type*: rvalue.
       
   758 
       
   759 ~~~
       
   760 file{$config_file:
       
   761   ensure  => file,
       
   762   content => unix2dos(template('my_module/settings.conf.erb')),
       
   763 }
       
   764 ~~~
       
   765 
       
   766 See also [dos2unix](#dos2unix).
       
   767 
       
   768 #### `upcase`
       
   769 
       
   770 Converts an object, array or hash of objects that respond to upcase to uppercase. For example, `upcase('abcd')` returns 'ABCD'. *Type*: rvalue.
       
   771 
       
   772 #### `uriescape`
       
   773 
       
   774 URLEncodes a string or array of strings. Requires either a single string or an array as an input. *Type*: rvalue.
       
   775 
       
   776 #### `validate_absolute_path`
       
   777 
       
   778 Validates that a given string represents an absolute path in the filesystem. Works for Windows and Unix style paths.
       
   779 
       
   780 The following values pass:
       
   781 
       
   782 ~~~
       
   783 $my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
       
   784 validate_absolute_path($my_path)
       
   785 $my_path2 = '/var/lib/puppet'
       
   786 validate_absolute_path($my_path2)
       
   787 $my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']
       
   788 validate_absolute_path($my_path3)
       
   789 $my_path4 = ['/var/lib/puppet','/usr/share/puppet']
       
   790 validate_absolute_path($my_path4)
       
   791 ~~~
       
   792 
       
   793 The following values fail, causing compilation to abort:
       
   794 
       
   795 ~~~
       
   796 validate_absolute_path(true)
       
   797 validate_absolute_path('../var/lib/puppet')
       
   798 validate_absolute_path('var/lib/puppet')
       
   799 validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
       
   800 validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
       
   801 $undefined = undef
       
   802 validate_absolute_path($undefined)
       
   803 ~~~
       
   804 
       
   805 *Type*: statement.
       
   806 
       
   807 #### `validate_array`
       
   808 
       
   809 Validates that all passed values are array data structures. Aborts catalog compilation if any value fails this check.
       
   810 
       
   811 The following values pass:
       
   812 
       
   813 ~~~
       
   814 $my_array = [ 'one', 'two' ]
       
   815 validate_array($my_array)
       
   816 ~~~
       
   817 
       
   818 The following values fail, causing compilation to abort:
       
   819 
       
   820 ~~~
       
   821 validate_array(true)
       
   822 validate_array('some_string')
       
   823 $undefined = undef
       
   824 validate_array($undefined)
       
   825 ~~~
       
   826 
       
   827 *Type*: statement.
       
   828 
       
   829 #### `validate_augeas`
       
   830 
       
   831 Performs validation of a string using an Augeas lens. The first argument of this function should be the 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 aborts with a parse error.
       
   832 
       
   833 A third optional argument lists 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.
       
   834 
       
   835 For example, to make sure your $passwdcontent never contains user `foo`:
       
   836 
       
   837 ~~~
       
   838 validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])
       
   839 ~~~
       
   840 
       
   841 To ensure that no users use the '/bin/barsh' shell:
       
   842 
       
   843 ~~~
       
   844 validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']
       
   845 ~~~
       
   846 
       
   847 You can pass a fourth argument as the error message raised and shown to the user:
       
   848 
       
   849 ~~~
       
   850 validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
       
   851 ~~~
       
   852 
       
   853 *Type*: statement.
       
   854 
       
   855 #### `validate_bool`
       
   856 
       
   857 Validates that all passed values are either true or false. Aborts catalog compilation if any value fails this check.
       
   858 
       
   859 The following values will pass:
       
   860 
       
   861 ~~~
       
   862 $iamtrue = true
       
   863 validate_bool(true)
       
   864 validate_bool(true, true, false, $iamtrue)
       
   865 ~~~
       
   866 
       
   867 The following values will fail, causing compilation to abort:
       
   868 
       
   869 ~~~
       
   870 $some_array = [ true ]
       
   871 validate_bool("false")
       
   872 validate_bool("true")
       
   873 validate_bool($some_array)
       
   874 ~~~
       
   875 
       
   876 *Type*: statement.
       
   877 
       
   878 #### `validate_cmd`
       
   879 
       
   880 Performs validation of a string with an external command. The first argument of this function should be a string to test, and the second argument should be a path to a test command taking a % as a placeholder for the file path (will default to the end of the command if no % placeholder given). If the command is launched against a tempfile containing the passed string, or returns a non-null value, compilation will abort with a parse error.
       
   881 
       
   882 If a third argument is specified, this will be the error message raised and seen by the user.
       
   883 
       
   884 ~~~
       
   885 # Defaults to end of path
       
   886 validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
       
   887 ~~~
       
   888 ~~~
       
   889 # % as file location
       
   890 validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
       
   891 ~~~
       
   892 
       
   893 *Type*: statement.
       
   894 
       
   895 #### `validate_hash`
       
   896 
       
   897 Validates that all passed values are hash data structures. Aborts catalog compilation if any value fails this check.
       
   898 
       
   899   The following values will pass:
       
   900 
       
   901   ~~~
       
   902   $my_hash = { 'one' => 'two' }
       
   903   validate_hash($my_hash)
       
   904   ~~~
       
   905 
       
   906   The following values will fail, causing compilation to abort:
       
   907 
       
   908   ~~~
       
   909   validate_hash(true)
       
   910   validate_hash('some_string')
       
   911   $undefined = undef
       
   912   validate_hash($undefined)
       
   913   ~~~
       
   914 
       
   915 *Type*: statement.
       
   916 
       
   917 #### `validate_integer`
       
   918 
       
   919 Validates that the first argument is an integer (or an array of integers). Aborts catalog compilation if any of the checks fail.
       
   920 
       
   921   The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
       
   922 
       
   923   The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
       
   924   If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
       
   925   if (all elements of) the first argument are greater or equal to the given minimum.
       
   926 
       
   927   It will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.
       
   928 
       
   929   The following values will pass:
       
   930 
       
   931   ~~~
       
   932   validate_integer(1)
       
   933   validate_integer(1, 2)
       
   934   validate_integer(1, 1)
       
   935   validate_integer(1, 2, 0)
       
   936   validate_integer(2, 2, 2)
       
   937   validate_integer(2, '', 0)
       
   938   validate_integer(2, undef, 0)
       
   939   $foo = undef
       
   940   validate_integer(2, $foo, 0)
       
   941   validate_integer([1,2,3,4,5], 6)
       
   942   validate_integer([1,2,3,4,5], 6, 0)
       
   943   ~~~
       
   944 
       
   945   * Plus all of the above, but any combination of values passed as strings ('1' or "1").
       
   946   * Plus all of the above, but with (correct) combinations of negative integer values.
       
   947 
       
   948   The following values will fail, causing compilation to abort:
       
   949 
       
   950   ~~~
       
   951   validate_integer(true)
       
   952   validate_integer(false)
       
   953   validate_integer(7.0)
       
   954   validate_integer({ 1 => 2 })
       
   955   $foo = undef
       
   956   validate_integer($foo)
       
   957   validate_integer($foobaridontexist)
       
   958 
       
   959   validate_integer(1, 0)
       
   960   validate_integer(1, true)
       
   961   validate_integer(1, '')
       
   962   validate_integer(1, undef)
       
   963   validate_integer(1, , 0)
       
   964   validate_integer(1, 2, 3)
       
   965   validate_integer(1, 3, 2)
       
   966   validate_integer(1, 3, true)
       
   967   ~~~
       
   968 
       
   969   * Plus all of the above, but any combination of values passed as strings ('false' or "false").
       
   970   * Plus all of the above, but with incorrect combinations of negative integer values.
       
   971   * Plus all of the above, but with non-integer items in arrays or maximum / minimum argument.
       
   972 
       
   973   *Type*: statement.
       
   974 
       
   975 #### `validate_numeric`
       
   976 
       
   977 Validates that the first argument is a numeric value (or an array of numeric values). Aborts catalog compilation if any of the checks fail.
       
   978 
       
   979   The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
       
   980 
       
   981   The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
       
   982   If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
       
   983   if (all elements of) the first argument are greater or equal to the given minimum.
       
   984 
       
   985   It will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.
       
   986 
       
   987   For passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.
       
   988 
       
   989 *Type*: statement.
       
   990 
       
   991 #### `validate_re`
       
   992 
       
   993 Performs simple validation of a string against one or more regular expressions. The first argument of this function should be the string to
       
   994 test, and the second argument should be a stringified regular expression (without the // delimiters) or an array of regular expressions. If none of the regular expressions match the string passed in, compilation aborts with a parse error.
       
   995 
       
   996   You can pass a third argument as the error message raised and shown to the user.
       
   997 
       
   998   The following strings validate against the regular expressions:
       
   999 
       
  1000   ~~~
       
  1001   validate_re('one', '^one$')
       
  1002   validate_re('one', [ '^one', '^two' ])
       
  1003   ~~~
       
  1004 
       
  1005   The following string fails to validate, causing compilation to abort:
       
  1006 
       
  1007   ~~~
       
  1008   validate_re('one', [ '^two', '^three' ])
       
  1009   ~~~
       
  1010 
       
  1011   To set the error message:
       
  1012 
       
  1013   ~~~
       
  1014   validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
       
  1015   ~~~
       
  1016 
       
  1017 *Type*: statement.
       
  1018 
       
  1019 #### `validate_slength`
       
  1020 
       
  1021 Validates that the first argument is a string (or an array of strings), and is less than or equal to the length of the second argument. It fails if the first argument is not a string or array of strings, or if arg 2 is not convertable to a number.  Optionally, a minimum string length can be given as the third argument.
       
  1022 
       
  1023   The following values pass:
       
  1024 
       
  1025   ~~~
       
  1026   validate_slength("discombobulate",17)
       
  1027   validate_slength(["discombobulate","moo"],17)
       
  1028   validate_slength(["discombobulate","moo"],17,3)
       
  1029   ~~~
       
  1030 
       
  1031   The following values fail:
       
  1032 
       
  1033   ~~~
       
  1034   validate_slength("discombobulate",1)
       
  1035   validate_slength(["discombobulate","thermometer"],5)
       
  1036   validate_slength(["discombobulate","moo"],17,10)
       
  1037   ~~~
       
  1038 
       
  1039 *Type*: statement.
       
  1040 
       
  1041 #### `validate_string`
       
  1042 
       
  1043 Validates that all passed values are string data structures. Aborts catalog compilation if any value fails this check.
       
  1044 
       
  1045 The following values pass:
       
  1046 
       
  1047   ~~~
       
  1048   $my_string = "one two"
       
  1049   validate_string($my_string, 'three')
       
  1050   ~~~
       
  1051 
       
  1052   The following values fail, causing compilation to abort:
       
  1053 
       
  1054   ~~~
       
  1055   validate_string(true)
       
  1056   validate_string([ 'some', 'array' ])
       
  1057   ~~~
       
  1058 
       
  1059 *Note:* validate_string(undef) will not fail in this version of the functions API (incl. current and future parser).
       
  1060 
       
  1061 Instead, use:
       
  1062 
       
  1063   ~~~
       
  1064   if $var == undef {
       
  1065     fail('...')
       
  1066   }
       
  1067   ~~~
       
  1068 
       
  1069 *Type*: statement.
       
  1070 
       
  1071 #### `values`
       
  1072 
       
  1073 Returns the values of a given hash. For example, given `$hash = {'a'=1, 'b'=2, 'c'=3} values($hash)` returns [1,2,3].
       
  1074 
       
  1075 *Type*: rvalue.
       
  1076 
       
  1077 #### `values_at`
       
  1078 
       
  1079 Finds values inside an array based on location. The first argument is the array you want to analyze, and the second argument can be a combination of:
       
  1080 
       
  1081   * A single numeric index
       
  1082   * A range in the form of 'start-stop' (eg. 4-9)
       
  1083   * An array combining the above
       
  1084 
       
  1085   For example, `values_at(['a','b','c'], 2)` returns ['c']; `values_at(['a','b','c'], ["0-1"])` returns ['a','b']; and `values_at(['a','b','c','d','e'], [0, "2-3"])` returns ['a','c','d'].
       
  1086 
       
  1087 *Type*: rvalue.
       
  1088 
       
  1089 #### `zip`
       
  1090 
       
  1091 Takes one element from first array given and merges corresponding elements from second array given. This generates a sequence of n-element arrays, where *n* is one more than the count of arguments. For example, `zip(['1','2','3'],['4','5','6'])` results in ["1", "4"], ["2", "5"], ["3", "6"]. *Type*: rvalue.
       
  1092 
       
  1093 ##Limitations
       
  1094 
       
  1095 As of Puppet Enterprise 3.7, the stdlib module is no longer included in PE. PE users should install the most recent release of stdlib for compatibility with Puppet modules.
       
  1096 
       
  1097 ###Version Compatibility
       
  1098 
       
  1099 Versions | Puppet 2.6 | Puppet 2.7 | Puppet 3.x | Puppet 4.x |
       
  1100 :---------------|:-----:|:---:|:---:|:----:
       
  1101 **stdlib 2.x**  | **yes** | **yes** | no | no
       
  1102 **stdlib 3.x**  | no    | **yes**  | **yes** | no
       
  1103 **stdlib 4.x**  | no    | **yes**  | **yes** | no
       
  1104 **stdlib 4.6+**  | no    | **yes**  | **yes** | **yes**
       
  1105 **stdlib 5.x**  | no    | no  | **yes**  | **yes**
       
  1106 
       
  1107 **stdlib 5.x**: When released, stdlib 5.x will drop support for Puppet 2.7.x. Please see [this discussion](https://github.com/puppetlabs/puppetlabs-stdlib/pull/176#issuecomment-30251414).
       
  1108 
       
  1109 ##Development
       
  1110 
       
  1111 Puppet Labs modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad hardware, software, and deployment configurations that Puppet is intended to serve. We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. For more information, see our [module contribution guide.](https://docs.puppetlabs.com/forge/contributing.html)
       
  1112 
       
  1113 To report or research a bug with any part of this module, please go to
       
  1114 [http://tickets.puppetlabs.com/browse/PUP](http://tickets.puppetlabs.com/browse/PUP).
       
  1115 
       
  1116 ##Contributors
       
  1117 
       
  1118 The list of contributors can be found at: https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors