2011-05-24 20:06:30 +02:00
# Puppet Labs Standard Library #
This module provides a "standard library" of resources for developing Puppet
Modules. This modules will include the following additions to Puppet
* Stages
2011-05-24 20:23:16 +02:00
* Facts
2011-05-24 20:06:30 +02:00
* Functions
2011-05-24 20:23:16 +02:00
* Defined resource types
2011-05-24 20:06:30 +02:00
* Types
* Providers
This module is officially curated and provided by Puppet Labs. The modules
Puppet Labs writes and distributes will make heavy use of this standard
library.
2012-08-30 23:50:00 +02:00
To report or research a bug with any part of this module, please go to
2012-08-18 00:15:26 +02:00
[http://projects.puppetlabs.com/projects/stdlib ](http://projects.puppetlabs.com/projects/stdlib )
2011-12-30 20:46:21 +01:00
# Versions #
This module follows semver.org (v1.0.0) versioning guidelines. The standard
library module is released as part of [Puppet
Enterprise](http://puppetlabs.com/puppet/puppet-enterprise/) and as a result
older versions of Puppet Enterprise that Puppet Labs still supports will have
bugfix maintenance branches periodically "merged up" into master. The current
list of integration branches are:
* v2.1.x (v2.1.1 released in PE 1.2, 1.2.1, 1.2.3, 1.2.4)
* v2.2.x (Never released as part of PE, only to the Forge)
2012-08-16 19:59:31 +02:00
* v2.3.x (Released in PE 2.5.x)
2011-12-30 20:46:21 +01:00
* master (mainline development branch)
The first Puppet Enterprise version including the stdlib module is Puppet
Enterprise 1.2.
2011-05-24 20:23:16 +02:00
# Compatibility #
2012-08-16 19:59:31 +02:00
The stdlib module does not work with Puppet versions released prior to Puppet
2.6.0.
2011-12-30 20:46:21 +01:00
2012-08-16 19:59:31 +02:00
## stdlib 2.x ##
2011-12-30 20:46:21 +01:00
2012-08-16 19:59:31 +02:00
All stdlib releases in the 2.0 major version support Puppet 2.6 and Puppet 2.7.
2011-12-30 20:46:21 +01:00
2012-08-16 19:59:31 +02:00
## stdlib 3.x ##
The 3.0 major release of stdlib drops support for Puppet 2.6. Stdlib 3.x
2012-12-05 00:07:46 +01:00
supports Puppet 2 and Puppet 3.
2011-05-24 20:23:16 +02:00
2011-08-05 02:20:39 +02:00
# Functions #
2011-05-24 20:06:30 +02:00
2012-08-16 19:59:31 +02:00
abs
---
2012-08-30 23:50:00 +02:00
Returns the absolute value of a number, for example -34.56 becomes 34.56. Takes
a single integer and float value as an argument.
2012-08-16 19:59:31 +02:00
- *Type*: rvalue
bool2num
--------
Converts a boolean to a number. Converts the values:
false, f, 0, n, and no to 0
true, t, 1, y, and yes to 1
Requires a single boolean or string as an input.
- *Type*: rvalue
capitalize
----------
Capitalizes the first letter of a string or array of strings.
Requires either a single string or an array as an input.
- *Type*: rvalue
chomp
-----
2012-08-30 23:50:00 +02:00
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.
2012-08-16 19:59:31 +02:00
- *Type*: rvalue
chop
----
2012-08-30 23:50:00 +02:00
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 wish to merely remove record
2012-08-16 19:59:31 +02:00
separators then you should use the `chomp` function.
Requires a string or array of strings as input.
- *Type*: rvalue
defined_with_params
-------------------
Takes a resource reference and an optional hash of attributes.
Returns true if a resource with the specified attributes has already been added
to the catalog, and false otherwise.
user { 'dan':
ensure => present,
}
if ! defined_with_params(User[dan], {'ensure' => 'present' }) {
user { 'dan': ensure => present, }
}
- *Type*: rvalue
delete
------
Deletes a selected element from an array.
*Examples:*
delete(['a','b','c'], 'b')
Would return: ['a','c']
- *Type*: rvalue
delete_at
---------
Deletes a determined indexed value from an array.
*Examples:*
delete_at(['a','b','c'], 1)
Would return: ['a','c']
- *Type*: rvalue
downcase
--------
Converts the case of a string or all strings in an array to lower case.
- *Type*: rvalue
empty
-----
Returns true if the variable is empty.
- *Type*: rvalue
ensure_resource
---------------
Takes a resource type, title, and a list of attributes that describe a
resource.
user { 'dan':
ensure => present,
}
This example only creates the resource if it does not already exist:
ensure_resource('user, 'dan', {'ensure' => 'present' })
If the resource already exists but does not match the specified parameters,
this function will attempt to recreate the resource leading to a duplicate
resource definition error.
- *Type*: statement
flatten
-------
This function flattens any deeply nested arrays and returns a single flat array
as a result.
*Examples:*
flatten(['a', ['b', ['c']]])
Would return: ['a','b','c']
- *Type*: rvalue
fqdn_rotate
-----------
Rotates an array a random number of times based on a nodes fqdn.
- *Type*: rvalue
get_module_path
---------------
Returns the absolute path of the specified module for the current
environment.
Example:
$module_path = get_module_path('stdlib')
- *Type*: rvalue
getvar
------
Lookup a variable in a remote namespace.
For example:
$foo = getvar('site::data::foo')
# Equivalent to $foo = $site::data::foo
This is useful if the namespace itself is stored in a string:
$datalocation = 'site::data'
$bar = getvar("${datalocation}::bar")
# Equivalent to $bar = $site::data::bar
- *Type*: rvalue
grep
----
This function searches through an array and returns any elements that match
the provided regular expression.
*Examples:*
grep(['aaa','bbb','ccc','aaaddd'], 'aaa')
Would return:
['aaa','aaaddd']
- *Type*: rvalue
has_key
-------
Determine if a hash has a certain key value.
Example:
$my_hash = {'key_one' => 'value_one'}
if has_key($my_hash, 'key_two') {
notice('we will not reach here')
}
if has_key($my_hash, 'key_one') {
notice('this will be printed')
}
- *Type*: rvalue
hash
----
This function converts and array into a hash.
*Examples:*
hash(['a',1,'b',2,'c',3])
Would return: {'a'=>1,'b'=>2,'c'=>3}
- *Type*: rvalue
is_array
--------
Returns true if the variable passed to this function is an array.
- *Type*: rvalue
is_domain_name
--------------
Returns true if the string passed to this function is a syntactically correct domain name.
- *Type*: rvalue
is_float
--------
Returns true if the variable passed to this function is a float.
- *Type*: rvalue
is_hash
-------
Returns true if the variable passed to this function is a hash.
- *Type*: rvalue
is_integer
----------
Returns true if the variable returned to this string is an integer.
- *Type*: rvalue
is_ip_address
-------------
Returns true if the string passed to this function is a valid IP address.
- *Type*: rvalue
is_mac_address
--------------
Returns true if the string passed to this function is a valid mac address.
- *Type*: rvalue
is_numeric
----------
Returns true if the variable passed to this function is a number.
- *Type*: rvalue
is_string
---------
Returns true if the variable passed to this function is a string.
- *Type*: rvalue
join
----
This function joins an array into a string using a seperator.
*Examples:*
join(['a','b','c'], ",")
Would result in: "a,b,c"
- *Type*: rvalue
keys
----
Returns the keys of a hash as an array.
- *Type*: rvalue
loadyaml
--------
Load a YAML file containing an array, string, or hash, and return the data
in the corresponding native data type.
For example:
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
- *Type*: rvalue
lstrip
------
Strips leading spaces to the left of a string.
- *Type*: rvalue
member
------
This function determines if a variable is a member of an array.
*Examples:*
member(['a','b'], 'b')
Would return: true
member(['a','b'], 'c')
Would return: false
- *Type*: rvalue
merge
-----
Merges two or more hashes together and returns the resulting hash.
For example:
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2)
# The resulting hash is equivalent to:
# $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
When there is a duplicate key, the key in the rightmost hash will "win."
- *Type*: rvalue
num2bool
--------
This function converts a number into a true boolean. Zero becomes false. Numbers
higher then 0 become true.
- *Type*: rvalue
parsejson
---------
This function accepts JSON as a string and converts into the correct Puppet
structure.
- *Type*: rvalue
parseyaml
---------
2012-08-30 23:50:00 +02:00
This function accepts YAML as a string and converts it into the correct
2012-08-16 19:59:31 +02:00
Puppet structure.
- *Type*: rvalue
prefix
------
This function applies a prefix to all elements in an array.
*Examles:*
prefix(['a','b','c'], 'p')
Will return: ['pa','pb','pc']
- *Type*: rvalue
range
-----
When given range in the form of (start, stop) it will extrapolate a range as
an array.
*Examples:*
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"]
- *Type*: rvalue
reverse
-------
Reverses the order of a string or array.
- *Type*: rvalue
rstrip
------
Strips leading spaces to the right of the string.
- *Type*: rvalue
shuffle
-------
Randomizes the order of a string or array elements.
- *Type*: rvalue
size
----
Returns the number of elements in a string or array.
- *Type*: rvalue
sort
----
Sorts strings and arrays lexically.
- *Type*: rvalue
squeeze
-------
2012-08-30 23:50:00 +02:00
Returns a new string where runs of the same character that occur in this set
are replaced by a single character.
2012-08-16 19:59:31 +02:00
- *Type*: rvalue
str2bool
--------
2012-08-30 23:50:00 +02:00
This converts a string to a boolean. This attempt to convert strings that
2012-08-16 19:59:31 +02:00
contain things like: y, 1, t, true to 'true' and strings that contain things
like: 0, f, n, false, no to 'false'.
- *Type*: rvalue
str2saltedsha512
----------------
2012-08-30 23:50:00 +02:00
This converts a string to a salted-SHA512 password hash (which is used for OS X
versions >= 10.7). 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.
2012-08-16 19:59:31 +02:00
- *Type*: rvalue
strftime
--------
This function returns formatted time.
*Examples:*
To return the time since epoch:
strftime("%s")
To return the date:
strftime("%Y-%m-%d")
*Format meaning:*
%a - The abbreviated weekday name (``Sun'')
%A - The full weekday name (``Sunday'')
%b - The abbreviated month name (``Jan'')
%B - The full month name (``January'')
%c - The preferred local date and time representation
%C - Century (20 in 2009)
%d - Day of the month (01..31)
%D - Date (%m/%d/%y)
%e - Day of the month, blank-padded ( 1..31)
%F - Equivalent to %Y-%m-%d (the ISO 8601 date format)
%h - Equivalent to %b
%H - Hour of the day, 24-hour clock (00..23)
%I - Hour of the day, 12-hour clock (01..12)
%j - Day of the year (001..366)
%k - hour, 24-hour clock, blank-padded ( 0..23)
%l - hour, 12-hour clock, blank-padded ( 0..12)
%L - Millisecond of the second (000..999)
%m - Month of the year (01..12)
%M - Minute of the hour (00..59)
%n - Newline (
)
%N - Fractional seconds digits, default is 9 digits (nanosecond)
%3N millisecond (3 digits)
%6N microsecond (6 digits)
%9N nanosecond (9 digits)
%p - Meridian indicator (``AM'' or ``PM'')
%P - Meridian indicator (``am'' or ``pm'')
%r - time, 12-hour (same as %I:%M:%S %p)
%R - time, 24-hour (%H:%M)
%s - Number of seconds since 1970-01-01 00:00:00 UTC.
%S - Second of the minute (00..60)
2012-08-30 23:50:00 +02:00
%t - Tab character ( )
2012-08-16 19:59:31 +02:00
%T - time, 24-hour (%H:%M:%S)
%u - Day of the week as a decimal, Monday being 1. (1..7)
%U - Week number of the current year,
starting with the first Sunday as the first
day of the first week (00..53)
%v - VMS date (%e-%b-%Y)
%V - Week number of year according to ISO 8601 (01..53)
%W - Week number of the current year,
starting with the first Monday as the first
day of the first week (00..53)
%w - Day of the week (Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time
%X - Preferred representation for the time alone, no date
%y - Year without a century (00..99)
%Y - Year with century
%z - Time zone as hour offset from UTC (e.g. +0900)
%Z - Time zone name
%% - Literal ``%'' character
- *Type*: rvalue
strip
-----
This function removes leading and trailing whitespace from a string or from
every string inside an array.
*Examples:*
strip(" aaa ")
Would result in: "aaa"
- *Type*: rvalue
swapcase
--------
This function will swap the existing case of a string.
*Examples:*
swapcase("aBcD")
Would result in: "AbCd"
- *Type*: rvalue
time
----
This function will return the current time since epoch as an integer.
*Examples:*
time()
Will return something like: 1311972653
- *Type*: rvalue
to_bytes
--------
Converts the argument into bytes, for example 4 kB becomes 4096.
Takes a single string value as an argument.
- *Type*: rvalue
type
----
Returns the type when passed a variable. Type can be one of:
* string
* array
* hash
* float
* integer
* boolean
- *Type*: rvalue
unique
------
This function will remove duplicates from strings and arrays.
*Examples:*
unique("aabbcc")
Will return:
abc
You can also use this with arrays:
unique(["a","a","b","b","c","c"])
This returns:
["a","b","c"]
- *Type*: rvalue
upcase
------
Converts a string or an array of strings to uppercase.
*Examples:*
upcase("abcd")
Will return:
2012-08-30 12:40:12 +02:00
ABCD
2012-08-16 19:59:31 +02:00
- *Type*: rvalue
validate_absolute_path
----------------------
Validate the string represents an absolute path in the filesystem. This function works
for windows and unix style paths.
The following values will pass:
$my_path = "C:/Program Files (x86)/Puppet Labs/Puppet"
validate_absolute_path($my_path)
$my_path2 = "/var/lib/puppet"
validate_absolute_path($my_path2)
The following values will fail, causing compilation to abort:
validate_absolute_path(true)
validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
$undefined = undef
validate_absolute_path($undefined)
- *Type*: statement
validate_array
--------------
Validate that all passed values are array data structures. Abort catalog
compilation if any value fails this check.
The following values will pass:
$my_array = [ 'one', 'two' ]
validate_array($my_array)
The following values will fail, causing compilation to abort:
validate_array(true)
validate_array('some_string')
$undefined = undef
validate_array($undefined)
- *Type*: statement
validate_bool
-------------
Validate that all passed values are either true or false. Abort catalog
compilation if any value fails this check.
The following values will pass:
$iamtrue = true
validate_bool(true)
validate_bool(true, true, false, $iamtrue)
The following values will fail, causing compilation to abort:
$some_array = [ true ]
validate_bool("false")
validate_bool("true")
validate_bool($some_array)
- *Type*: statement
validate_hash
-------------
Validate that all passed values are hash data structures. Abort catalog
compilation if any value fails this check.
The following values will pass:
$my_hash = { 'one' => 'two' }
validate_hash($my_hash)
The following values will fail, causing compilation to abort:
validate_hash(true)
validate_hash('some_string')
$undefined = undef
validate_hash($undefined)
- *Type*: statement
validate_re
-----------
Perform simple validation of a string against one or more regular
expressions. The first argument of this function should be a string to
test, and the second argument should be a stringified regular expression
(without the // delimiters) or an array of regular expressions. If none
of the regular expressions match the string passed in, compilation will
abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.
The following strings will validate against the regular expressions:
validate_re('one', '^one$')
validate_re('one', [ '^one', '^two' ])
The following strings will fail to validate, causing compilation to abort:
validate_re('one', [ '^two', '^three' ])
A helpful error message can be returned like this:
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
- *Type*: statement
validate_slength
----------------
Validate that the first argument is a string (or an array of strings), and
less/equal to than the length of the second argument. It fails if the first
argument is not a string or array of strings, and if arg 2 is not convertable
to a number.
The following values will pass:
validate_slength("discombobulate",17)
validate_slength(["discombobulate","moo"],17)
The following valueis will not:
validate_slength("discombobulate",1)
validate_slength(["discombobulate","thermometer"],5)
- *Type*: statement
validate_string
---------------
Validate that all passed values are string data structures. Abort catalog
compilation if any value fails this check.
The following values will pass:
$my_string = "one two"
validate_string($my_string, 'three')
The following values will fail, causing compilation to abort:
validate_string(true)
validate_string([ 'some', 'array' ])
$undefined = undef
validate_string($undefined)
- *Type*: statement
values
------
When given a hash this function will return the values of that hash.
*Examples:*
$hash = {
'a' => 1,
'b' => 2,
'c' => 3,
}
values($hash)
This example would return:
[1,2,3]
- *Type*: rvalue
values_at
---------
Finds value inside an array based on location.
The first argument is the array you want to analyze, and the second element can
be a combination of:
* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above
*Examples*:
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'].
- *Type*: rvalue
zip
---
Takes one element from first array and merges corresponding elements from second array. This generates a sequence of n-element arrays, where n is one more than the count of arguments.
2011-05-24 20:06:30 +02:00
2012-08-16 19:59:31 +02:00
*Example:*
2011-05-24 20:06:30 +02:00
2012-08-16 19:59:31 +02:00
zip(['1','2','3'],['4','5','6'])
2011-05-24 20:23:16 +02:00
2012-08-16 19:59:31 +02:00
Would result in:
2011-06-22 02:06:46 +02:00
2012-08-16 19:59:31 +02:00
["1", "4"], ["2", "5"], ["3", "6"]
2011-06-22 02:06:46 +02:00
2012-08-16 19:59:31 +02:00
- *Type*: rvalue