Update CHANGELOG, Modulefile for 3.1.1
Merge branch '3.1.x' into 3.x

* 3.1.x:
  Update CHANGELOG, Modulefile for 3.1.1
Add function, uriescape, to URI.escape strings. Redmine #17459
Add function, uriescape, to URI.escape strings. Redmine #17459
Add function, uriescape, to URI.escape strings. Redmine #17459
Merge branch 'add/2.x/joejulian-add_uriescape' into 2.x

* add/2.x/joejulian-add_uriescape:
  Add function, uriescape, to URI.escape strings. Redmine #17459
Merge branch 'add/3.x/joejulian-add_uriescape' into 3.x

* add/3.x/joejulian-add_uriescape:
  Add function, uriescape, to URI.escape strings. Redmine #17459
Merge branch '2.x' into 3.x

* 2.x:
  Add function, uriescape, to URI.escape strings. Redmine #17459
Merge branch 'add/4.x/joejulian-add_uriescape' into 4.x

* add/4.x/joejulian-add_uriescape:
  Add function, uriescape, to URI.escape strings. Redmine #17459
Merge branch '3.x' into 4.x

* 3.x:
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Update CHANGELOG, Modulefile for 3.1.1
Merge branch '4.x'

* 4.x:
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Add function, uriescape, to URI.escape strings. Redmine #17459
  Update CHANGELOG, Modulefile for 3.1.1
(#13974) Add predicate functions for interface facts

If one wishes to test if a host has a particular IP address (such as a floating
virtual address) or has an interface on a particular network (such as a
secondary management network), the facts that provide this information are
difficult to use within Puppet.

This patch addresses these needs by implementing functions
‘has_ip_address(value)’ and ‘has_ip_network(value)’. These functions look
through all interfaces for ipaddress_<interface> and network_<interface>
(respectively) having the requested <value>.

These functions are implemented on top of a lower-level predicate
function, ‘has_interface_with(kind, value)’, which iterates through the
interfaces in the ‘interfaces’ fact and checks the facts <kind>_<interface>
looking for <value>.

Additionally, the existence of a particular named interface can be checked for
by calling with only a single argument: has_interface_with(interface).

A Boolean is returned in all cases.
Merge branch 'add/2.x/13974-has_interface_with' into 2.x

* add/2.x/13974-has_interface_with:
  (#13974) Add predicate functions for interface facts
Merge branch '2.x' into 3.x

* 2.x:
  (#13974) Add predicate functions for interface facts
Merge branch '3.x' into 4.x

* 3.x:
  (#13974) Add predicate functions for interface facts
Merge branch '4.x'

* 4.x:
  (#13974) Add predicate functions for interface facts
Add the pick() function

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
(two things in Puppet that will return a boolean false value).
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')

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.
Merge branch 'feature/2.x/pick' into 2.x

* feature/2.x/pick:
  Add the pick() function
Merge branch '2.x' into 3.x

* 2.x:
  Add the pick() function
Merge branch '3.x' into 4.x

* 3.x:
  Add the pick() function