summaryrefslogtreecommitdiffstats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* (#8808) Fail Augeas resource when unable to save changesDominic Cleal2011-08-061-3/+5
| | | | | Raise a failure when Augeas changes cannot be saved (due to invalid layout of the tree, permissions etc). Fixes a regression.
* (#4762) Ensure that clients on the moon can successfully connect.Daniel Pittman2011-08-041-1/+1
| | | | | | | | | | | | | | | | | | Previously, we only allowed Puppet Clients at a maximum distance of somewhere between 7,494 and 14,988 kilometers from the master, depending on the variance in local conditions. While this gave us good data security against hostile clients connecting from the dark side of the moon, real world testing shows the moon folks are likely to just take over a local staging host and attack that way. So, instead, allow clients sufficient time they should be comfortable able to connect to a master from the moon. We still refuse clients further out, like Mars, since it seems unlikely that Puppet management over that distance should work. We advise the manned Mars expedition to deploy a local Puppet Master to manage infrastructure in their base, and to watch out for the martians.
* Revert "Merge branch 'vcsrepo'"Jacob Helwig2011-08-027-763/+0
| | | | | | | | | | | vcsrepo is available in a module of its own, is missing tests, and goes against the long-term goal of moving "extra" types out of core puppet into modules (an example of this is the nagios types). This reverts commit 25b967559dfa39eb094008c7a3952c4ee885530b, reversing changes made to b87a1dea704ed981f2f0af728afac2c63e87b5a8. Reviewed-by: Michael Stahnke <mike@puppetlabs.com>
* Merge branch 'ticket/2.7.x/8704-fileserverconf_parse_errors' into 2.7.xMatt Robinson2011-07-291-0/+3
|\ | | | | | | | | * ticket/2.7.x/8704-fileserverconf_parse_errors: (#8704) Give better errors for invalid fileserver.conf
| * (#8704) Give better errors for invalid fileserver.confMatt Robinson2011-07-291-0/+3
| | | | | | | | | | | | | | | | | | | | | | If you tried to just put an allow or deny line in the fileserver.conf without a mount point, you got a really confusing error message: lib/puppet/network/handler/fileserver.rb:285:in `readconfig': undefined method `info' for nil:NilClass (NoMethodError) Now instead we give an error saying no mount point was specified. Reviewed-by: Josh Cooper <josh@puppetlabs.com>
* | Merge branch 'tickets/2.7.x/1886' into 2.7.xPieter van de Bruggen2011-07-281-1/+4
|\ \ | | | | | | | | | | | | * tickets/2.7.x/1886: (Maint.) Disable cleaning of storeconfigs.
| * | (Maint.) Disable cleaning of storeconfigs.Pieter van de Bruggen2011-07-281-1/+4
| | | | | | | | | | | | | | | | | | | | | This feature (and the corresponding tests) were causing intermittent failures which we were unable to trace. We will reintroduce this behavior when we can do so without test fragility. Reviewed-By: Matt Robinson
* | | (#8690) Accept 'global' options in Puppet FacesDaniel Pittman2011-07-281-0/+2
|/ / | | | | | | | | | | | | | | | | | | When we introduced verification of options, we forgot to handle the case that global options from the Puppet settings system could be passed to the face. This, in turn, means that the system would fail if you used any of those. This remediates that, and now these work as expected. Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>
* | (#1886) Clean up `node clean` for merge.Pieter van de Bruggen2011-07-282-72/+69
| | | | | | | | | | This includes various style changes, and assorted fixes to testing. Paired-With: Matt Robinson
* | Fix #1886 - Add node cleanup capabilityPeter Meier2011-07-274-17/+202
|/ | | | | | | | | | | | | | | | | | | | | | | | | Here is a changeset that adds a new action to the puppet node face. This application removes all traces of a node on the puppetmaster (including certs, cached facts and nodes, reports, and storedconfig entries). Furthermore it is capable of unexporting exported resources of a host so that consumers of these resources can remove the exported resources and we will safely remove the node from our infrastructure. Usage: puppet node clean [--unexport] <host> [<host2> ...] To achieve this we add different destroy methods to the different parts of the indirector. So for example for yaml indirections we already offer read access for the yaml, this changeset adds the destroy handler which only removes the yaml file for a request. This can be used to remove cached entries. This work is based on the initial work of Brice Figureau <brice-puppet@daysofwonder.com>
* Deprecate RestAuthConfig#allowed? in favor of #check_authorizationBrice Figureau2011-07-262-2/+7
| | | | | | | | | | | | | | | | | #allowed? was a poorly named method since it isn't actually a predicate method. Instead of returning a boolean, this methods throws an exception when the access is denied (in order to keep the full context of what ACE triggered the deny). Given that #allowed? was overriding the behavior from AuthConfig, we leave a version of #allowed? in place that will issue a deprecation warning before delegating to #check_authorization. Once support for XML-RPC agents is removed from the master, we will be able to remove this delegation, since there should no longer be a reason for a distinction between AuthConfig and RestAuthConfig. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com> Signed-off-by: Jacob Helwig <jacob@puppetlabs.com>
* Fix #6026 - security file should support inline commentsBrice Figureau2011-07-262-14/+7
| | | | | | | | Auth.conf, namespaceauth.conf and fileserver.conf were not supporting trailing inlined comments. Also this commit fixes some indentation and error management. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Fix #5010 - Allow leading whitespace in auth.confBrice Figureau2011-07-261-0/+2
| | | | | | | The regex used to detect ACE is too lax and would allow trailing spaces to sneak in, which in turn would confuse the ACE parser. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Merge branch 'ticket/2.7.x/maint-show_help_for_cert_without_subcommand' into ↵Matt Robinson2011-07-261-1/+2
|\ | | | | | | | | | | | | 2.7.x * ticket/2.7.x/maint-show_help_for_cert_without_subcommand: maint: Fix cert app to print help and exit if no subcommand
| * maint: Fix cert app to print help and exit if no subcommandMatt Robinson2011-07-251-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In 2.6.x this was the behavior, but the changes to the way options parsing worked in 2.7.x to support faces changed the behavior of how help was called. This resulted in the follow unhelpful error message when you just called `puppet cert`: /Users/matthewrobinson/work/puppet/lib/puppet/ssl/certificate_authority/interface.rb:85:in `method=' Invalid method to apply Reviewed-by: Pieter van de Bruggen <pieter@puppetlabs.com>
* | maint: Suggest where to start troubleshooting SSL error messageMatt Robinson2011-07-261-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Much like the infamous "hostname was not match" error message, there's another SSL error that people run into that isn't clear how to troubleshoot. err: Could not send report: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed. As far as I can tell this only ever happens when the clock is off on the master or client. People seem to think it will happen other times, but I haven't been able to reproduce it other ways - missing private key, revoked cert, offline CA all have their own errors. I googled around and the only thing I've seen for this error in relation to puppet is the time sync problem. So the error message text just has some additional info to suggest you check your clocks. Reviewed-by: Nick Lewis <nick@puppetlabs.com>
* | Merge branch '2.6.x' into 2.7.xNick Lewis2011-07-254-6/+14
|\ \ | |/ |/|
| * (#8596) Detect resource alias conflicts when titles do not matchNick Lewis2011-07-251-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The introduction of composite namevars caused the resource title used in resource aliases to be set as an array, even when the resource only had one namevar. This would fail to conflict with non-alias entries in the resource table, which used a string for the title, even though the single element array contained the same string. Now, we flatten the key used in the resource table, so that single element arrays are represented as strings, and will properly conflict with resource titles. Paired-With: Jacob Helwig <jacob@puppetlabs.com>
| * Merge branch 'ticket/2.6.x/8418-inspect_respect_run_mode' into 2.6.xMatt Robinson2011-07-253-3/+8
| |\ | | | | | | | | | | | | | | | | | | * ticket/2.6.x/8418-inspect_respect_run_mode: (#8418) Fix inspect app to have the correct run_mode maint: Adding logging to include environment when source fails maint: Add debug logging when the master receives a report
| | * (#8418) Fix inspect app to have the correct run_modeMatt Robinson2011-07-251-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Requiring puppet before the run_mode has been set by the application causes the default run_mode of 'user' to be set instead of what the application wants. This leads to the incorrect default settings to be used, which lead to inspect not being able to properly retrieve file metadata from a fileserver. Reviewed-by: Max Martin <max@puppetlabs.com>
| | * maint: Adding logging to include environment when source failsMatt Robinson2011-07-251-1/+1
| | | | | | | | | | | | Reviewed-by: Max Martin <max@puppetlabs.com>
| | * maint: Add debug logging when the master receives a reportMatt Robinson2011-07-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | It's always bothered me that when running puppet inspect (or any application that produces a report really) the master gives no indication that anything happened when it processes the report. Reviewed-by: Max Martin <max@puppetlabs.com>
* | | Merge branch 'tickets/2.7.x/7293' into 2.7.xPieter van de Bruggen2011-07-253-20/+16
|\ \ \
| * | | (#7293) Set default format for SSL-related faces.Pieter van de Bruggen2011-07-253-11/+7
| | | | | | | | | | | | | | | | | | | | | | | | By default, the SSL-related faces should all render a strings, not with `Object#inspect`. Reviewed-By: Daniel Pittman
| * | | (Maint.) Unquoting HEREDOCs.Pieter van de Bruggen2011-07-252-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | The additional quotation marks frustrate certain syntax highlighters, and are completely unnecessary for their use. Reviewed-By: Daniel Pittman
* | | | Merge branch '2.7rc' into 2.7.xMichael Stahnke2011-07-256-25/+193
|\ \ \ \ | |/ / / |/| | |
| * | | (#5108) Update service type docs for new hasstatus defaultnfagerlund2011-07-141-24/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit #7d35a479 changed the default value of the service type's hasstatus attribute. This was never documented. This commit documents the changed behavior, which will end up in the type references (and puppet describe) for version 2.7.2 and greater. (I intend to manually change the cached references for versions 2.7.[01].)
| * | | Updated CHANGELOG and package building files for 2.7.2rc1Michael Stahnke2011-07-061-1/+1
| | | | | | | | | | | | | | | | Signed-off-by: Michael Stahnke <stahnma@puppetlabs.com>
| * | | Merge branch '2.7.x'Jacob Helwig2011-06-2812-140/+173
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.x: (23 commits) Clean up indentation, whitespace, and commented out code Remove order dependency from functions integration spec (#7956) Porting cron tests (#7956) Port resource acceptance tests (#8048) Gem install puppet no longer fails if rdoc enabled. Updating for 2.7.1 release. (#8048) Gem install puppet no longer fails if rdoc enabled. Readying for release of 2.6.9 Updating CHANGELOG for 2.7.0 (#6854) Update Red Hat spec file Bumping release in lib/puppet.rb and updating CHANGELOG. Bumping RPM spec file to 2.6.9rc1. (#7224) Reword 'hostname was not match' error message (#7224) Add a helper to Puppet::SSL::Certificate to retrieve alternate names (#7506) Organize READMEs; specify supported Ruby versions in README.md (#7506) Specify supported Ruby versions in README.md (#5641) Help text: document that puppet doc takes modulepath, manifestdir, and environment options (#6418) Make test 64118 more portable (#7127) Stop puppet if a prerun command fails Do not needlessly create multiple reports when creating a transaction ...
| * | | | Clean up indentation, whitespace, and commented out codeJacob Helwig2011-06-171-6/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The mis-indented code, extra newlines, and commented out code were noticed while investigating the order dependent test failure fixed in 4365c8ba. Reviewed-by: Max Martin <max@puppetlabs.com>
| * | | | Merge branch '2.7.x'Nick Lewis2011-06-0836-323/+582
| |\ \ \ \
| * \ \ \ \ Merge branch '2.7.x'Matt Robinson2011-06-064-37/+54
| |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.x: (#7624) Manually fetch all properties in instances. (#7193) Fix path issues with acceptance tests that call old shell tests (#7632) Make secret_agent application compatible with secret_agent face (#7624) Auditing should not be enabled by default for purged resources. maint: Confine augeas specs to require the augeas feature (#2728) Add diff output for changes made by Augeas provider
| * \ \ \ \ \ Merge branch '2.7.x'Max Martin2011-06-0242-647/+1146
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.x: (40 commits) (#7746) Fix bootstrap issues from #7717 fix. (#7683) Use ronn, when available, to render the output. (#7683) Add a 'man' face and subcommand to Puppet. maint: remove obsolete work-around code from help face. (#7699) Don't duplicate inherited action names on faces. (#7177) Deprecate implicit 'puppet apply' for 2.7.0 (#7717) Layout cleanup for subcommand extraction. #7211: Test unknown options don't shadow unknown actions. #7211: nasty logic error with global Face options taking arguments. #7211: more helpful error messages in various cases. maint: Fix order dependent test failure (#5966) Add support for hostname regular expressions in auth.conf (#7708) Delete extended documentation from configuration reference (#7707) Document signals in puppet agent and puppet master help add puppet master polling step for ticket 7117 (#5318) Always notice changes to manifests when compiling. (#5318) Always notice changes to manifests when compiling. (#7557) Remove Faces Application maint: Fix order dependent spec failure for face indirection (#7690) Don't blow up when listing terminuses available for faces ... Conflicts (resolved manually): acceptance/tests/ticket_7117_broke_env_criteria_authconf.rb
| * | | | | | | maint: Fix pacman provider to work with Ruby 1.9Matt Robinson2011-05-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ruby 1.9 doesn't allow the lambda to walk up the directory structure to require the spec helper This is the same issue as with commit: f6da3339f59bbd9243a03dc1e417b1fed7955c7e Also, you can't call each on a string in Ruby 1.9 directly since it doesn't implicitly do a split on \n like it did in older Rubies, but each_line works all the way back to 1.8.5 Reviewed-by: Nick Lewis <nick@puppetlabs.com>
| * | | | | | | Merge branch '2.7.x'Matt Robinson2011-05-232-2/+2
| |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.x: (#7502) Fixed parser spec for ruby 1.8.5 (#7507) Add more 1.9 filters (#6395) Add extpuppet help, eval, and interfaces maint: move trap call to Signal so we can stub it for specs Updated CHANGELOG for 2.7.0rc3 (#7259) Remove ActiveRecord requirement from indirector face spec (#7259) Do not try to load all Terminus classes when configuring the Indirector Adding a sleep state post starting master
| * | | | | | | | Added the vcsrepo type and providers to the coreJames Turnbull2011-05-237-0/+763
| | | | | | | | |
| * | | | | | | | Merge branch '2.7.next' into nextPieter van de Bruggen2011-05-184-1264/+955
| |\ \ \ \ \ \ \ \
| * \ \ \ \ \ \ \ \ Merge branch '2.7.next' into nextPieter van de Bruggen2011-05-1714-18/+43
| |\ \ \ \ \ \ \ \ \
| * | | | | | | | | | (#1853) Pacman package providerPaul Boyd2011-05-161-0/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds support for use Archlinux's pacman package manager in Puppet. Originally written by Miah Johnson, with bug fixes from Thomas Hatch and myself.
| * | | | | | | | | | Merge branch '2.7.next' into nextMatt Robinson2011-05-133-16/+3
| |\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.next: Revert "(#7220) Add the ability to "inherit" options." (#7469) Add license to test face so tests pass (#7264) Docs: Clarify that subscribe/notify imply require/before (#7468) Stub spec that tries to connect to pypi.python.org Prevent spec failure caused by network device mock leak Fix #7299 - do not require net/ssh for running rake spec
| * \ \ \ \ \ \ \ \ \ \ Merge branch '2.7.next' into nextDaniel Pittman2011-05-1254-370/+1322
| |\ \ \ \ \ \ \ \ \ \ \
| * | | | | | | | | | | | Fixed #7481 - Added MIT license to Thomas Bellman's function codeJames Turnbull2011-05-123-0/+78
| | | | | | | | | | | | |
| * | | | | | | | | | | | (#7264) Docs: Clarify that subscribe/notify imply require/beforenfagerlund2011-05-111-40/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a doc string only commit. The metaparameter reference was not clear about subscribe and notify being supersets of require and before, respectively. This commit also cleans up some unrelated quoting, arrow-alignment, and language flow issues.
| * | | | | | | | | | | | Merge branch '2.7.next' into nextMax Martin2011-04-276-11/+50
| |\ \ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 2.7.next: (#3420) Nagios "name" attribute does not output correctly (#4487) When setting environment on a host, ensure it is a string. add test for ticket 7101 (#7220) Add the ability to "inherit" options. (#6487) Add some testing for OS X version support in DirectoryService provider (#6487) Directoryservice provider will fail in future OS releases (#6368) Make the File type autorequire its nearest ancestor directory
| * | | | | | | | | | | | | (#7101) Fix template error messages in Ruby 1.8.5Max Martin2011-04-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | lib/puppet/parser/templatewrapper.rb#script_line was calling .first on a String object, which in Ruby > 1.8.5 will return the entire string, but in 1.8.5 will cause an exception. This change (proposed by Markus Roberts) removes the call to .first and adds a condition for when the template error involves the file not being found. Reviewed-by: Jesse Wolfe
* | | | | | | | | | | | | | (#7266) Move Certificate option validation into face.Pieter van de Bruggen2011-07-252-14/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The validation for the ca_location option on the certificate application continued to hang around on the application long after the face realized its potential to take responsibility for itself. This change moves (and adds) validation code as appropriate into the Face. Reviewed-By: Matt Robinson
* | | | | | | | | | | | | | (#7290) Update indirected Faces to avoid unknown options.Daniel Pittman2011-07-221-4/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that we enforce that options must be declared, the model we exposed in the Ruby API (but not the CLI facade) was that you could pass additional arguments to the indirection method by passing them as unknown options doesn't work. Instead, explicitly declare an option, `extra`, that accepts the final argument to be passed direct to the indirection. This makes things work smoothly, as well as making it possible (once you can input a hash on the command line) to invoke extra arguments from the facade too... Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>
* | | | | | | | | | | | | | maint: don't print inside action implementations.Daniel Pittman2011-07-221-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than printing directly, we should return the data from the Action and allow the facade to route that to the user directly. Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>
* | | | | | | | | | | | | | (#8561, #7290) Implement the option contract fully.Daniel Pittman2011-07-221-35/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite the process of validating and updating the options to fully reflect the contract - we fail if there are unknown options passed, report nicely errors of duplicate names, pass only the canonical names to the action code, and generally enforce nicely. Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>
* | | | | | | | | | | | | | (#8561) Unify validation and modification of action arguments.Daniel Pittman2011-07-221-7/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than having multiple, separate operations that modify and validate the arguments to an action, a single pass makes sense. This also means less walks across the set of data, and a few less expensive method calls in Ruby. Additionally, we work on a duplicate of the arguments hash rather than directly modifying the original. Because everything we do is at the top level key/value mapping, this is sufficient to isolate the original. While mostly theoretical, we now don't mutilate the hash passed in, so the user won't get nastily surprised by the fact that we could have done so. Reviewed-By: Pieter van de Bruggen <pieter@puppetlabs.com>