One comment below, On Tue, 2009-04-14 at 23:30 -0500, Luke Kanies wrote: > Also working around a YAML bug in Ruby. > > Signed-off-by: Luke Kanies <[email protected]> > --- > lib/puppet/node/catalog.rb | 20 +++++++++++--------- > lib/puppet/parser/resource.rb | 2 ++ > lib/puppet/parser/resource/param.rb | 8 +++++--- > lib/puppet/parser/resource/reference.rb | 6 ++++++ > lib/puppet/parser/yaml_trimmer.rb | 11 +++++++++++ > 5 files changed, 35 insertions(+), 12 deletions(-) > create mode 100644 lib/puppet/parser/yaml_trimmer.rb > > diff --git a/lib/puppet/node/catalog.rb b/lib/puppet/node/catalog.rb > index 3473deb..ab80a97 100644 > --- a/lib/puppet/node/catalog.rb > +++ b/lib/puppet/node/catalog.rb > @@ -432,16 +432,18 @@ class Puppet::Node::Catalog < Puppet::PGraph > } > end > > - # LAK:NOTE We cannot yaml-dump the class in the edgelist_class, because > classes cannot be > - # dumped by default, nor does yaml-dumping # the edge-labels work at > this point (I don't > - # know why). > - # Neither of these matters right now, but I suppose it could at some > point. > - # We also have to have the vertex_dict dumped after the resource table, > because yaml can't > - # seem to handle the output of yaml-dumping the vertex_dict. > def to_yaml_properties > - props = instance_variables.reject { |v| %...@edgelist_class > @edge_labels @vertex_dict}.include?(v) } > - props << "@vertex_dict" > - props > + result = instance_variables > + > + # There's a ruby bug that hits us without this: > + # > http://rubyforge.org/tracker/?group_id=426&atid=1698&func=detail&aid=8886 > + # We need our resources to show up in as values in a hash > + # before they show up as keys, because otherwise > + # the loading fails. > + result.delete "@resource_table" > + result.unshift "@resource_table" > + > + result > end > > private > diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb > index 893d5ba..9f496c7 100644 > --- a/lib/puppet/parser/resource.rb > +++ b/lib/puppet/parser/resource.rb > @@ -5,6 +5,7 @@ class Puppet::Parser::Resource > require 'puppet/parser/resource/reference' > require 'puppet/util/tagging' > require 'puppet/file_collection/lookup' > + require 'puppet/parser/yaml_trimmer' > > include Puppet::FileCollection::Lookup > > @@ -13,6 +14,7 @@ class Puppet::Parser::Resource > include Puppet::Util::Errors > include Puppet::Util::Logging > include Puppet::Util::Tagging > + include Puppet::Parser::YamlTrimmer > > attr_accessor :source, :scope, :rails_id > attr_accessor :virtual, :override, :translated > diff --git a/lib/puppet/parser/resource/param.rb > b/lib/puppet/parser/resource/param.rb > index 6e22d3e..3fbc596 100644 > --- a/lib/puppet/parser/resource/param.rb > +++ b/lib/puppet/parser/resource/param.rb > @@ -1,4 +1,5 @@ > require 'puppet/file_collection/lookup' > +require 'puppet/parser/yaml_trimmer' > > # The parameters we stick in Resources. > class Puppet::Parser::Resource::Param > @@ -8,6 +9,7 @@ class Puppet::Parser::Resource::Param > include Puppet::Util::MethodHelper > > include Puppet::FileCollection::Lookup > + include Puppet::Parser::YamlTrimmer > > def initialize(hash) > set_options(hash) > @@ -15,9 +17,9 @@ class Puppet::Parser::Resource::Param > @name = symbolize(@name) > end > > - def inspect > - "#<#{self.class} @name => #{name}, @value => #{value}, @source => > #{source.name}, @line => #{line}>" > - end > + #def inspect > + # "#<#{self.class} @name => #{name}, @value => #{value}, @source => > #{source.name if source}, @line => #{line}>" > + #end
If this causes an issue, you should either comment on why it was commented, or if it isn't needed, remove it altogether. > def line_to_i > return line ? Integer(line) : nil > diff --git a/lib/puppet/parser/resource/reference.rb > b/lib/puppet/parser/resource/reference.rb > index bffc037..4a003f6 100644 > --- a/lib/puppet/parser/resource/reference.rb > +++ b/lib/puppet/parser/resource/reference.rb > @@ -1,8 +1,10 @@ > require 'puppet/resource_reference' > require 'puppet/file_collection/lookup' > +require 'puppet/parser/yaml_trimmer' > > # A reference to a resource. Mostly just the type and title. > class Puppet::Parser::Resource::Reference < Puppet::ResourceReference > + include Puppet::Parser::YamlTrimmer > include Puppet::FileCollection::Lookup > include Puppet::Util::MethodHelper > include Puppet::Util::Errors > @@ -68,6 +70,10 @@ class Puppet::Parser::Resource::Reference < > Puppet::ResourceReference > requiredopts(:type, :title) > end > > + def skip_for_yaml > + %...@typeclass @definedtype} > + end > + > def to_ref > # We have to return different cases to provide backward compatibility > # from 0.24.x to 0.23.x. > diff --git a/lib/puppet/parser/yaml_trimmer.rb > b/lib/puppet/parser/yaml_trimmer.rb > new file mode 100644 > index 0000000..14064c8 > --- /dev/null > +++ b/lib/puppet/parser/yaml_trimmer.rb > @@ -0,0 +1,11 @@ > +module Puppet::Parser::YamlTrimmer > + REMOVE = %...@scope @source} > + > + def to_yaml_properties > + r = instance_variables - REMOVE > + if respond_to?(:skip_for_yaml) > + r -= skip_for_yaml() > + end > + r > + end > +end -- Brice Figureau My Blog: http://www.masterzen.fr/ --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
