diff options
Diffstat (limited to 'lib/puppet/rails')
-rw-r--r-- | lib/puppet/rails/host.rb | 63 | ||||
-rw-r--r-- | lib/puppet/rails/resource.rb | 17 |
2 files changed, 34 insertions, 46 deletions
diff --git a/lib/puppet/rails/host.rb b/lib/puppet/rails/host.rb index ac547e013..fbf51c838 100644 --- a/lib/puppet/rails/host.rb +++ b/lib/puppet/rails/host.rb @@ -3,6 +3,8 @@ require 'puppet/rails/fact_name' require 'puppet/rails/source_file' require 'puppet/util/rails/collection_merger' +# Puppet::TIME_DEBUG = true + class Puppet::Rails::Host < ActiveRecord::Base include Puppet::Util include Puppet::Util::CollectionMerger @@ -40,7 +42,8 @@ class Puppet::Rails::Host < ActiveRecord::Base #unless host = find_by_name(name) seconds = Benchmark.realtime { #unless host = find_by_name(name, :include => {:resources => {:param_names => :param_values}, :fact_names => :fact_values}) - unless host = find_by_name(name) + unless host = find_by_name(name, :include => {:fact_names => :fact_values}) + #unless host = find_by_name(name) host = new(:name => name) end } @@ -56,7 +59,11 @@ class Puppet::Rails::Host < ActiveRecord::Base raise ArgumentError, "You must pass resources" end - host.setresources(hash[:resources]) + + seconds = Benchmark.realtime { + host.setresources(hash[:resources]) + } + Puppet.notice("Handled resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) host.last_compile = Time.now @@ -85,35 +92,17 @@ class Puppet::Rails::Host < ActiveRecord::Base facts = facts.dup remove = [] - existing = nil - seconds = Benchmark.realtime { - existing = fact_names.find(:all, :include => :fact_values) - } - Puppet.debug("Searched for facts in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) - - existing.each do |fn| - if value = facts[fn.name] - facts.delete(fn.name) - fn.fact_values.each do |fv| - unless value == fv.value - fv.value = value - end + collection_merge :fact_names, :updates => facts, :modify => Proc.new { |fn, name, value| + fn.fact_values.each do |fv| + unless value == fv.value + fv.value = value end - else - remove << fn + break end - end - - # Make a new fact for the rest of them - facts.each do |fact, value| - fn = fact_names.build(:name => fact) + }, :create => Proc.new { |name, value| + fn = fact_names.build(:name => name) fn.fact_values = [fn.fact_values.build(:value => value)] - end - - # Now remove anything necessary. - remove.each do |fn| - fact_names.delete(fn) - end + } end # Set our resources. @@ -122,28 +111,16 @@ class Puppet::Rails::Host < ActiveRecord::Base remove = [] existing = nil seconds = Benchmark.realtime { + #existing = resources.find(:all) existing = resources.find(:all, :include => {:param_names => :param_values}) + #existing = resources } Puppet.notice("Searched for resources in %0.2f seconds" % seconds) if defined?(Puppet::TIME_DEBUG) list.each do |resource| compiled[resource.ref] = resource end - existing.each do |resource| - if comp = compiled[resource.ref] - compiled.delete(comp.ref) - comp.to_rails(self, resource) - else - remove << resource - end - end - - compiled.each do |name, resource| - resource.to_rails(self) - end - remove.each do |resource| - resources.delete(resource) - end + collection_merge :resources, :existing => existing, :updates => compiled end def update_connect_time diff --git a/lib/puppet/rails/resource.rb b/lib/puppet/rails/resource.rb index c3bf8c38a..4f26af6d9 100644 --- a/lib/puppet/rails/resource.rb +++ b/lib/puppet/rails/resource.rb @@ -14,19 +14,30 @@ class Puppet::Rails::Resource < ActiveRecord::Base acts_as_taggable def tags=(tags) - tags.each do |tag| - self.tag_with tag + #puts "setting tags %s" % tags.inspect + self.tag_with(tags.join(",")) + end + + def file + if f = self.source_file + return f.filename + else + return nil end end def file=(file) - self.source_file = Puppet::Rails::SourceFile.new(:filename => file) + self.source_file = Puppet::Rails::SourceFile.new(:filename => file) end def [](param) return super || parameter(param) end + def name + ref() + end + def parameter(param) if pn = param_names.find_by_name(param) if pv = pn.param_values.find(:first) |