summaryrefslogtreecommitdiffstats
path: root/0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch')
-rw-r--r--0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch182
1 files changed, 182 insertions, 0 deletions
diff --git a/0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch b/0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch
new file mode 100644
index 0000000..55566ec
--- /dev/null
+++ b/0001-5428-More-fully-stub-Puppet-Resource-Reference-for-u.patch
@@ -0,0 +1,182 @@
+From ff9e2425a58bb2b1ab836e440c3344b4012623c5 Mon Sep 17 00:00:00 2001
+From: Jacob Helwig <jacob@puppetlabs.com>
+Date: Fri, 25 Feb 2011 17:03:56 -0800
+Subject: [PATCH/puppet] (#5428) More fully "stub" Puppet::Resource::Reference for use with storedconfigs
+
+The Puppet::Resource::Reference class wasn't stubbing enough of the 0.25.x
+behavior to satisfy the needs of storedconfigs. Since P::R::Reference,
+and Puppet::Resource were merged as part of 2.6.x, we can pretend that
+P::Resource is P::R::Reference for the purposes of loading data from
+storedconfigs. This should still satisfy the over-the-wire serialization
+needs of 0.25.x.
+
+This also changes internal references to @parameters in
+Puppet::Resource(::Reference) to go through a parameters method. This
+allows us to "initialize" this instance variable lazily, since loading via
+YAML bypasses the normal initialize method.
+
+Paired-with: Daniel Pittman <daniel@puppetlabs.com>
+Reviewed-by: Markus Roberts <markus@puppetlabs.com>
+---
+ lib/puppet/resource.rb | 35 +++++++++++++++++++----------------
+ spec/unit/resource_spec.rb | 26 ++++++++++++++++++++++++--
+ 2 files changed, 43 insertions(+), 18 deletions(-)
+
+diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
+index e832804..e47fc7e 100644
+--- a/lib/puppet/resource.rb
++++ b/lib/puppet/resource.rb
+@@ -5,6 +5,11 @@ require 'puppet/util/pson'
+ # The simplest resource class. Eventually it will function as the
+ # base class for all resource-like behaviour.
+ class Puppet::Resource
++ # This stub class is only needed for serialization compatibility with 0.25.x.
++ # Specifically, it exists to provide a compatibility API when using YAML
++ # serialized objects loaded from StoreConfigs.
++ Reference = Puppet::Resource
++
+ include Puppet::Util::Tagging
+
+ require 'puppet/resource/type_collection_helper'
+@@ -104,7 +109,7 @@ class Puppet::Resource
+ # be overridden at some point, but this works for now.
+ %w{has_key? keys length delete empty? <<}.each do |method|
+ define_method(method) do |*args|
+- @parameters.send(method, *args)
++ parameters.send(method, *args)
+ end
+ end
+
+@@ -112,13 +117,13 @@ class Puppet::Resource
+ # to lower-case symbols.
+ def []=(param, value)
+ validate_parameter(param) if validate_parameters
+- @parameters[parameter_name(param)] = value
++ parameters[parameter_name(param)] = value
+ end
+
+ # Return a given parameter's value. Converts all passed names
+ # to lower-case symbols.
+ def [](param)
+- @parameters[parameter_name(param)]
++ parameters[parameter_name(param)]
+ end
+
+ def ==(other)
+@@ -140,11 +145,11 @@ class Puppet::Resource
+
+ # Iterate over each param/value pair, as required for Enumerable.
+ def each
+- @parameters.each { |p,v| yield p, v }
++ parameters.each { |p,v| yield p, v }
+ end
+
+ def include?(parameter)
+- super || @parameters.keys.include?( parameter_name(parameter) )
++ super || parameters.keys.include?( parameter_name(parameter) )
+ end
+
+ # These two methods are extracted into a Helper
+@@ -170,14 +175,6 @@ class Puppet::Resource
+ end
+ end
+
+- # This stub class is only needed for serialization compatibility with 0.25.x
+- class Reference
+- attr_accessor :type,:title
+- def initialize(type,title)
+- @type,@title = type,title
+- end
+- end
+-
+ # Create our resource.
+ def initialize(type, title = nil, attributes = {})
+ @parameters = {}
+@@ -204,7 +201,7 @@ class Puppet::Resource
+ tag(self.type)
+ tag(self.title) if valid_tag?(self.title)
+
+- @reference = Reference.new(@type,@title) # for serialization compatibility with 0.25.x
++ @reference = self # for serialization compatibility with 0.25.x
+ if strict? and ! resource_type
+ if @type == 'Class'
+ raise ArgumentError, "Could not find declared class #{title}"
+@@ -234,7 +231,7 @@ class Puppet::Resource
+
+ # Produce a simple hash of our parameters.
+ def to_hash
+- parse_title.merge @parameters
++ parse_title.merge parameters
+ end
+
+ def to_s
+@@ -256,7 +253,7 @@ class Puppet::Resource
+ # Convert our resource to Puppet code.
+ def to_manifest
+ "%s { '%s':\n%s\n}" % [self.type.to_s.downcase, self.title,
+- @parameters.collect { |p, v|
++ parameters.collect { |p, v|
+ if v.is_a? Array
+ " #{p} => [\'#{v.join("','")}\']"
+ else
+@@ -422,4 +419,10 @@ class Puppet::Resource
+ return { :name => title.to_s }
+ end
+ end
++
++ def parameters
++ # @parameters could have been loaded from YAML, causing it to be nil (by
++ # bypassing initialize).
++ @parameters ||= {}
++ end
+ end
+diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb
+index ff31b24..4c1dc49 100755
+--- a/spec/unit/resource_spec.rb
++++ b/spec/unit/resource_spec.rb
+@@ -99,11 +99,11 @@ describe Puppet::Resource do
+ end
+
+ it 'should fail if strict is set and type does not exist' do
+- lambda { Puppet::Resource.new('foo', 'title', {:strict=>true}) }.should raise_error(ArgumentError, 'Invalid resource type foo')
++ lambda { Puppet::Resource.new('foo', 'title', {:strict=>true}) }.should raise_error(ArgumentError, 'Invalid resource type foo')
+ end
+
+ it 'should fail if strict is set and class does not exist' do
+- lambda { Puppet::Resource.new('Class', 'foo', {:strict=>true}) }.should raise_error(ArgumentError, 'Could not find declared class foo')
++ lambda { Puppet::Resource.new('Class', 'foo', {:strict=>true}) }.should raise_error(ArgumentError, 'Could not find declared class foo')
+ end
+
+ it "should fail if the title is a hash and the type is not a valid resource reference string" do
+@@ -463,6 +463,28 @@ describe Puppet::Resource do
+ end
+ end
+
++ describe "when loading 0.25.x storedconfigs YAML" do
++ before :each do
++ @old_storedconfig_yaml = %q{--- !ruby/object:Puppet::Resource::Reference
++builtin_type:
++title: /tmp/bar
++type: File
++}
++ end
++
++ it "should deserialize a Puppet::Resource::Reference without exceptions" do
++ lambda { YAML.load(@old_storedconfig_yaml) }.should_not raise_error
++ end
++
++ it "should deserialize as a Puppet::Resource::Reference as a Puppet::Resource" do
++ YAML.load(@old_storedconfig_yaml).class.should == Puppet::Resource
++ end
++
++ it "should to_hash properly" do
++ YAML.load(@old_storedconfig_yaml).to_hash.should == { :path => "/tmp/bar" }
++ end
++ end
++
+ describe "when converting to a RAL resource" do
+ it "should use the resource type's :new method to create the resource if the resource is of a builtin type" do
+ resource = Puppet::Resource.new("file", @basepath+"/my/file")
+--
+1.7.4.1
+