Collection override can now work when declared outside of the class
hierarchy that defines the resource to be collected/overriden, as
in this example:
class a {
file { "/tmp/test": content => "pouet" }
}
class b {
include a
File <| |> { mode => 0600 }
}
Signed-off-by: Brice Figureau <[email protected]>
---
lib/puppet/parser/collector.rb | 2 +-
lib/puppet/parser/resource.rb | 2 +-
spec/unit/parser/collector.rb | 15 +++++++++++++++
spec/unit/parser/resource.rb | 6 ++++++
4 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/lib/puppet/parser/collector.rb b/lib/puppet/parser/collector.rb
index 7dc1f72..f7599ce 100644
--- a/lib/puppet/parser/collector.rb
+++ b/lib/puppet/parser/collector.rb
@@ -84,7 +84,7 @@ class Puppet::Parser::Collector
:params => overrides[:params],
:file => overrides[:file],
:line => overrides[:line],
- :source => overrides[:source],
+ :source => :override_must_succeed,
:scope => overrides[:scope]
)
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index d4c7a1f..c3d483e 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -154,7 +154,7 @@ class Puppet::Parser::Resource
def merge(resource)
# Test the resource scope, to make sure the resource is even allowed
# to override.
- unless self.source.object_id == resource.source.object_id ||
resource.source.child_of?(self.source)
+ unless self.source.object_id == resource.source.object_id ||
resource.source == :override_must_succeed ||
resource.source.child_of?(self.source)
raise Puppet::ParseError.new("Only subclasses can override
parameters", resource.line, resource.file)
end
# Some of these might fail, but they'll fail in the way we want.
diff --git a/spec/unit/parser/collector.rb b/spec/unit/parser/collector.rb
index b0c23f6..8e6fc06 100755
--- a/spec/unit/parser/collector.rb
+++ b/spec/unit/parser/collector.rb
@@ -190,6 +190,21 @@ describe Puppet::Parser::Collector, "when collecting
virtual and catalog resourc
@collector.evaluate
end
+ it "should create a resource with overriden parameters whose source is a
magic constant" do
+ one = stub_everything 'one', :type => "Mytype", :virtual? => true,
:title => "test"
+ param = stub 'param'
+ @compiler.stubs(:add_override)
+
+ @compiler.expects(:resources).returns([one])
+
+ @collector.add_override(:params => param )
+ Puppet::Parser::Resource.expects(:new).with { |h|
+ h[:source] == :override_must_succeed
+ }
+
+ @collector.evaluate
+ end
+
it "should not override already overriden resources for this same
collection in a previous run" do
one = stub_everything 'one', :type => "Mytype", :virtual? => true,
:title => "test"
param = stub 'param'
diff --git a/spec/unit/parser/resource.rb b/spec/unit/parser/resource.rb
index 410494d..e82e32f 100755
--- a/spec/unit/parser/resource.rb
+++ b/spec/unit/parser/resource.rb
@@ -286,6 +286,12 @@ describe Puppet::Parser::Resource do
lambda { @resource.merge(@override) }.should
raise_error(Puppet::ParseError)
end
+ it "should not fail when the override was created with the magic
constant source" do
+ @override.source = :override_must_succeed
+
+ lambda { @resource.merge(@override) }.should_not
raise_error(Puppet::ParseError)
+ end
+
it "should succeed when the override was created in the current scope"
do
@resource.source = "source3"
@override.source = @resource.source
--
1.6.0.2
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---