summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r--lib/puppet/parser/resource.rb14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index 7fcb7c1fc..1ae065f3c 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -324,10 +324,16 @@ class Puppet::Parser::Resource < Puppet::Resource
# If we've gotten this far, we're allowed to override.
- # Merge with previous value, if the parameter was generated with the +> syntax.
- # It's important that we use the new param instance here, not the old one,
- # so that the source is registered correctly for later overrides.
- param.value = [current.value, param.value].flatten if param.add
+ # Merge with previous value, if the parameter was generated with the +>
+ # syntax. It's important that we use a copy of the new param instance
+ # here, not the old one, and not the original new one, so that the source
+ # is registered correctly for later overrides but the values aren't
+ # implcitly shared when multiple resources are overrriden at once (see
+ # ticket #3556).
+ if param.add
+ param = param.dup
+ param.value = [current.value, param.value].flatten
+ end
set_parameter(param)
end