Without this commit the file_line type will outright fail if multiple
lines match the given regex. This commit allows the file_line type and
provider to optionally match and modify all matching lines.
Changeset rebased into a single commit by Adrien Thebo <adrien@puppetlabs.com>
Without this patch Puppet Enterprise users who install the most recent
version of stdlib lose the ability to resolve certain facts critical to
the operation of Puppet Enterprise. These facts are defined externally
in the file
`/etc/puppetlabs/facter/facts.d/puppet_enterprise_installer.txt`.
As an example, Puppet Enterprise catalogs fail to compile if the
`fact_stomp_server`, and `fact_stomp_port` facts are not defined.
`facter_dot_d` was removed from stdlib version 4 because Facter version
1.7 now supports external facts defined in
`/etc/puppetlabs/facter/facts.d/puppet_enterprise_installer.txt`.
Puppet Enterprise does not yet include Facter 1.7, however. The most
recent PE release, 2.8.1, includes Facter 1.6.17. With this version of
Facter, users who replace the version of stdlib that ships with PE with
the most recent version from the Forge will lose the ability to resolve
facts from
`/etc/puppetlabs/facter/facts.d/puppet_enterprise_installer.txt`.
This patch addresses the problem by detecting if Facter version < 1.7 is
loaded. If so, then the facter_dot_d.rb facts will be defined using the
stdlib custom fact. If Facter >= 1.7 is being used then stdlib will not
define external facts.
This patch allows an array of resource titles to be passed into
the ensure_resource function. Each item in the array will be
checked for existence and will be created if it doesn't already
exist.
Without this patch we don't have a spec test to make sure the anchor
resource type passes notify events along. This patch addresses the
problem by using RSpec Puppet to build a catalog, apply the catalog,
then pull a resource out of the transaction and make sure the resource
was triggered.
Without this patch the expected behavior of the count() function when
dealing with an out of bound array index and with a hash key that does
not exist is implicitly encoded in the spec examples. This is a problem
because the expected behavior is not clear for something similar to the
following example:
node default {
$ary = [ 1, 2, 3 ]
$ary_undef = $ary[100]
$hsh = { 'one' => 1 }
$hsh_undef = $hsh['dne']
$count = count(['hi', $ary_undef, $hsh_undef])
notice "Count is ${count}"
}
This patch addresses the problem by making the expected behavior
explicit in the examples.
This change is to implement a new function "any2array", which will take any
argument or arguments and create an array which contains it. If the argument
is a single array then it will be returned as-is. If the argument is a single
hash then it will be converted into an array. Otherwise (if there are more than
one argument, or the only argument is not an array or a hash) the function will
return an array containing all the arguments.
This is a bit more heavy-handed than I might like, but it does appear to
do the right things:
* accepts numeric input appropriately, truncating floats
* matches string input against a regex, then coerces number-looking
strings to int
* makes a best effort to coerce anything else to a string, then subjects
it to the same treatment
* raises an error in the event of incorrect number of arguments or
non-number-looking strings
I've also included some additional unit tests.
No more coercing to String and regex matching. Instead, we now coerce
to Integer at the beginning or raise an error if we cannot coerce to
Integer.
A consequence of this change is that the function will now accept
blatantly non-numeric strings as input, and return false. This seems a
bit goofy to me, but it's how String#to_i works. If we really don't
like this, then I'm open to suggestions.
Puppet passes numbers as String to functions, but it makes more sense to
compare them as Numeric.
But sometimes Puppet passes them as the wrong type, see:
https://projects.puppetlabs.com/issues/19812
This function provides a simple wrapper around
Puppet::Parser::Functions.function for access within Puppet manifests.
This will allow users to check whether or not a plugin or functionality
such as hiera is installed on the server.
This reverts commit f7a18189ec, reversing
changes made to 36a7b29630.
I'm reverting this change because of concerns raised by Peter Meier that
it duplicates the "in" operator in the DSL. The "in" operator is new
information that I did not posses when I made the decision to merge.
Because of this new information I'm un-merging and continuing the
discussion in the comments of
https://projects.puppetlabs.com/issues/19272
Reference: GH-130
It is exceptionally difficult to determine if an array contains an element matching a specific value without an iteration or loop construct.
This function is the Puppet equivalent of Array.includes?(foo) in Ruby. The implementation is a verbatim copy of has_key() with the minor modifications needed to support arrays instead of hashes.
Without this patch applied there is no easy way to append one array to
another. This is a problem because it is often desirable to join two
arrays without flattening the contents into a single, one dimensional
array.
This patch addresses the problem by adding a `concat()` function which
takes two arguments. The arguments will be concatenated together and a
new array returned to the caller.
Reviewed-by: Jeff McCune <jeff@puppetlabs.com>
As far as i know there's no other puppet-dsl-like way to get parameter of
defined resource, so that's why i implemented getparam function, which takes
resource reference and parameter name and returns parameter value.
Here's another example why this function is really useful:
define config($path, $config_param1, $config_param2) { }
define example_resource($config) {
$path = getparam($config, "path")
notice("Path is $path")
}
define example_resource2($example_resource, $config = getparam($example_resource, "config")) {
$config_param1 = getparam($config, "config_param1")
notice("Config parameter is $config_param1")
}
define example_resource3($example_resource, $config = getparam($example_resource, "config")) {
$config_param2 = getparam($config, "config_param2")
notice("Config parameter is $config_param2")
}
class test_getparam {
config { "config_instance":
path => "/some/config/path",
config_param1 => "someconfigtext1",
config_param2 => "someconfigtext2",
}
example_resource { "example_resource_instance":
config => Config["config_instance"]
}
example_resource2 { "example_resource_instance":
example_resource => Example_resource["example_resource_instance"]
}
example_resource3 { "example_resource_instance":
example_resource => Example_resource2["example_resource_instance"]
}
}
class { "test_getparam": }
* 4.x:
Add test/validation for is_float if created from an arithmetical operation
Add test/validation for is_integer if created from an arithmetical operation
Add test/validation for is_numeric if created from an arithmetical operation