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
-~----------~----~----~----~------~----~------~--~---

Reply via email to