Andrew Parker [Wed, 18 Dec 2013 22:46:54 +0000 (14:46 -0800)]
(Maint) Update stubbing to work with facter 1.7.4
Facter 1.7.4 changed how it decides on what directory to look in for
facts.d based on the user it is running as. This stubs out that bit of
code to make it think it is running as root.
Without this patch there is a disconnect between the documentation in
the README and our decision to not merge pull requests into the 4.x
series that break compatibility with Puppet 2.7.x
For example:
@jeffmccune I think the real issue here is that "policy" is out of sync with
the documentation. The README claims that 4.x does not support puppet 2.7.x,
yet the "policy" is not to merge patches that break 2.7.x. Due to that I'm sure
there are a lot of 2.7.x installations out there that have a 4.x version of
stdlib installed. That's going to cause a rather rude surprise if some future
version of 4.x stops working where a prior minor release was functioning.
I'd like to suggest that the documentation be changed to reflect 4.x supporting
2.7.x and that a new major version bump is made when 2.7.x support can in fact
be dropped. An alternative solution would be update the README with a note to
developers about the kinda/sorta/maybe/fishy/quasi support of 2.7.x.
Please also see this discussion:
https://github.com/puppetlabs/puppetlabs-stdlib/pull/176#issuecomment-30251414
Add rake tasks to validate and lint files and check with Travis
This patch adds the ability to validate syntax of manifests, templates,
and ruby files in lib/ via `rake validate` and the linting of manifests
with puppet-lint via `rake lint`. These two commands are chained with
running the spec tests in Travis to ensure there are no syntax or style
issues.
Markdown interprets [] folowed by () as a link, which was a 404 and not
the intention of the original author. This patch ensures that the
document reads as intended, without the link.
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.