bug # 20681 delete() function should not remove elements from original list
The setup: list with 3 elements, delete one:
$test_list = [‘a’, ‘b’, ‘c’]
$test_deleted = delete($test_list, ‘a’)
Print out the elements in ‘test_deleted’:
notify { ‘group_output2’: withpath => true, name => “$cfeng::test_deleted”, }
Notice: /Stage[main]/Syslog/Notify[group_output2]/message: bc
Good! Run-on output shows that ‘a’ was deleted
Print out the elements in ‘test_list’:
notify { ‘group_output1’: withpath => true, name => “$cfeng::test_list”, }
Notice: /Stage[main]/Syslog/Notify[group_output1]/message: bc
WHAT!? 'a' was deleted from ‘test_list’ as well! Expected abc as output!
This behaviour is confirmed for string, hash and array.
This is fixed on this commit, I had added two spec tests to cover that cases.
bug #20681 spec test for delete() function.
I had forgot in the last commit the spec test for hash in the
delete function.
bug # 20681 delete() function change aproach.
Instead of rejecting elements from the original list, we use
collection = arguments[0].dup .
then latter we could continue to use delete and gsub! on collection
without impact on original argument.
this is a better solution than the previous one, and works on ruby
1.8.7, 1.9.3 and 2.0.0.
The previous solution does not work on ruby 1.8.7.
When pick function fail return a better error message like
the other stdlib functions, indicating that the error
is on function pick.
This would help people that see the error to identity it is
related to a incorrect use of stdlib function pick, instead of having
to grep all puppet libraries and manifests source for the old message.
I had also changed the spec test.
pick function change spec as suggested GH-179
Fix the spec test to use expect {}.to instead of lambda {}.should
as explained by Adrienthebo.
"Using expect { }.to is preferred over lambda { }.should.
In addition it's best practice to do a string match against the
error message to ensure that we're catching the right error,
instead of any error of the right type."
Also fixed a typo on the error message, it was missing one space.
Jeff McCune [Thu, 29 Aug 2013 23:27:27 +0000 (16:27 -0700)]
(maint) Improve the tests and readability of file_line
Without this patch the implementation of the file_line provider is a bit
convoluted with respect to the newly introduced "after" parameter.
This patch addresses the problem by separating out the concerns of each
case into their own methods of handling the behavior with the match
parameter, handling the behavior with the after parameter, or simply
appending the line.
Dan Prince [Thu, 29 Aug 2013 16:19:16 +0000 (12:19 -0400)]
Update file_line resource to support 'after'.
When adding new lines to a file the 'after' option can be useful
when you need to insert file lines into the middle of a file.
This is particularly helpful when using file_line with sectioned
config files.
NOTE: the after option only works when adding new lines. If you are
updating an existing (matched) line it will simply modify it in place.
This assumes it was in the right place to begin with.
Jeff McCune [Thu, 29 Aug 2013 19:54:14 +0000 (12:54 -0700)]
(maint) Fix failing spec test with Puppet 3.3.0-rc2
Without this patch the stdlib spec tests are failing against recent
versions of Puppet. The root cause of this problem is a change in the
behavior of create_resources in Puppet 6baa57b. The change in behavior
caused the :name key to be omitted from the hash returned by
Puppet::Parser::Resource#to_hash which in turn is causing the test
failure.
This patch addresses the problem by updating the test to match the
description of the example. Only the attribute :ensure is checked
instead of the full hash itself.
Jeff McCune [Thu, 29 Aug 2013 19:59:44 +0000 (12:59 -0700)]
(maint) Fix location_for helper method
Without this patch the location_for helper method in the Gemfile
incorrectly assumes the mdata variable has a value. This patch
addresses the problem by explicitly binding the regular expression match
results to the mdata variable to ensure it has a value when accessed by
index.
Hubert [Thu, 8 Aug 2013 10:56:12 +0000 (12:56 +0200)]
Fix validate_slength, arg.length should be args[0].length
During a puppet run an error will be thrown and a puppet run will fail completely (when using validate_slength):
undefined local variable or method `arg' for #<Puppet::Parser::Scope:0x7f243c236948>
Martin Hellmich [Fri, 28 Jun 2013 16:03:37 +0000 (18:03 +0200)]
changed the validate_slength function to accept a min length
An optional third parameter can be given a min length. The function
then only passes successfully, if all strings are in the range
min_length <= string <= max_length
update and fix function and unit tests
the check for the minlength has to be written differently
because 0 values should be possible. We now check
a) if the input is convertible, and throw a ParseError and
b) if the input .is_a?(Numeric) and ask for a positive number
it's not as clean as for maxlength, but keeps a similar behaviour
refined the error checking for the min length
try to convert to Integer(args[2]) and fail,
if it's not possible
changed the tests accordingly to the new parameter checking
Alex O'Rielly [Fri, 21 Jun 2013 22:33:44 +0000 (17:33 -0500)]
(#21416) Allow file_line to match multiple lines
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>
Ryan Coleman [Fri, 10 May 2013 16:54:39 +0000 (09:54 -0700)]
Update Modulefile, CHANGELOG for version 4.1.0
This commit alters the module metadata to indicate a 4.1.0 version
release for the Puppet Forge. It contains backwards compatible
features, refactors and bug fixes.
Jeff McCune [Mon, 6 May 2013 23:29:35 +0000 (16:29 -0700)]
(#20582) Restore facter_dot_d to stdlib for PE users
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.
We're restoring facts_dot_d support to stdlib because users are pulling
in the latest version of stdlib while on Puppet Enterprise which breaks
the operation of PE itself when the fact_stomp_server and
fact_stomp_port facts are not defined. They are not defined in PE
because PE runs with Facter 1.6.17 and Puppet 2.7.21
Jeff McCune [Mon, 6 May 2013 23:22:59 +0000 (16:22 -0700)]
(maint) Update Gemfile with GEM_FACTER_VERSION
Without this patch we cannot explicitly set the version of Facter to
integrate using Bundler. This patch addresses the problem by adding a
new environment variable, GEM_FACTER_VERSION which allows bundler to
install a specific version of Facter. GEM_FACTER_VERSION is the
variable name instead of FACTER_GEM_VERSION to prevent the gem_version
fact from being defined. In addition, GEM_PUPPET_VERSION is defined
based on PUPPET_GEM_VERSION in order to match the environment names and
provide backwards compatibility with CI jobs.
Alex Cline [Fri, 3 May 2013 19:47:27 +0000 (15:47 -0400)]
(#20548) Allow an array of resource titles to be passed into the ensure_resource function
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.
Jeff McCune [Fri, 12 Apr 2013 16:23:34 +0000 (09:23 -0700)]
Update gemspec, Modulefile, CHANGELOG for 4.0.2
Without this patch the information displayed on rubygems.org does not
clearly convey the intent of the Gem format of stdlib from the official
puppet module format of stdlib. This is a problem because end users
might get confused and start installing stdlib from rubygems.org
This patch addresses the problem by making it clear that the gem version
of stdlib is not intended for end users, but rather is specifically
intended to make it easier for other module authors to depend on stdlib
and have that dependency automatically resolved using a Gemfile.
Jeff McCune [Fri, 12 Apr 2013 00:55:40 +0000 (17:55 -0700)]
Add behavior example for anchor refresh propagation
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.
Philip Potter [Thu, 12 Jul 2012 16:05:23 +0000 (17:05 +0100)]
Make the anchor type propagate refresh events
Without this patch the anchor resource does not propogate refresh
events, making it difficult to subscribe to a class which has been
notified by another resource.
Jeff McCune [Thu, 11 Apr 2013 21:29:56 +0000 (14:29 -0700)]
Fix README function documentation
Without this patch some core puppet functions leaked into the
documentation for the functions contained in stdlib. This patch removes
them and cleans up some of the formatting.
Jeff McCune [Thu, 11 Apr 2013 21:04:31 +0000 (14:04 -0700)]
Update function documentation for 4.0.0
Without this patch the function documentation is out of sync with the
functions contained in the standard library. This commit updates the
functions. I generated the list using this sequence:
cd ~/src/puppet
git checkout 3.1.1
bundle exec puppet doc -r function > /tmp/puppet_functions.txt
cd ~/src/stdlib
bundle exec puppet doc -r function > /tmp/stdlib_functions.txt
diff -U2 puppet_functions.txt stdlib_functions.txt | grep '^+' | perl -ple 's/^\+//' > functions.txt
I then replaced the README function documentation with the contents of
functions.txt which contains only the functions contained in stdlib.
Jeff McCune [Thu, 11 Apr 2013 16:49:53 +0000 (09:49 -0700)]
Add ability to use puppet from git via bundler
Without this patch the Gemfile can only satisfy dependencies using
officially release gem versions. This is a problem because we want to
test stdlib against the latest HEAD of the puppet git repository.
This patch addresses the problem by copying over the location_for method
from the Puppet Gemfile, which will parse out git://, file:// or Gem
version specifications.
This, in turn, allows jobs to be configured to run with different
dependency integrations.