diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-11-01 11:45:27 -0700 |
---|---|---|
committer | Jesse Wolfe <jes5199@gmail.com> | 2010-11-01 11:49:41 -0700 |
commit | fb5f859cf4a89042a1768b6cbc2dbfc43da49c99 (patch) | |
tree | 74ad789bb27f18b87bdbeaa83dfe9306105ed3a2 | |
parent | 5f0cf4ef50a3676229a1c824b9a730b6951e1c7a (diff) | |
download | puppet-fb5f859cf4a89042a1768b6cbc2dbfc43da49c99.tar.gz puppet-fb5f859cf4a89042a1768b6cbc2dbfc43da49c99.tar.xz puppet-fb5f859cf4a89042a1768b6cbc2dbfc43da49c99.zip |
Fix #5164 Change Facts timestamp when they are received by the master
This patch causes the puppet master to re-timestamp facts when they are
received by the catalog compiler terminus. This makes the timestamps
more trustworthy, as it means that they are all based upon the same
clock's time.
Paired-With: Paul Berry <paul@puppetlabs.com>
-rw-r--r-- | lib/puppet/indirector/catalog/compiler.rb | 1 | ||||
-rwxr-xr-x | lib/puppet/node/facts.rb | 18 | ||||
-rwxr-xr-x | spec/unit/indirector/catalog/compiler_spec.rb | 7 |
3 files changed, 20 insertions, 6 deletions
diff --git a/lib/puppet/indirector/catalog/compiler.rb b/lib/puppet/indirector/catalog/compiler.rb index c50022fff..1e1ae12b1 100644 --- a/lib/puppet/indirector/catalog/compiler.rb +++ b/lib/puppet/indirector/catalog/compiler.rb @@ -22,6 +22,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code else facts = Puppet::Node::Facts.convert_from(format, text_facts) end + facts.add_timestamp facts.save end diff --git a/lib/puppet/node/facts.rb b/lib/puppet/node/facts.rb index ad4b91e98..d84d54113 100755 --- a/lib/puppet/node/facts.rb +++ b/lib/puppet/node/facts.rb @@ -35,7 +35,7 @@ class Puppet::Node::Facts @name = name @values = values - add_internal + add_timestamp end def downcase_if_necessary @@ -75,13 +75,21 @@ class Puppet::Node::Facts }.to_pson(*args) end - private - # Add internal data to the facts for storage. - def add_internal - self.values[:_timestamp] = Time.now + def add_timestamp + self.timestamp = Time.now + end + + def timestamp=(time) + self.values[:_timestamp] = time end + def timestamp + self.values[:_timestamp] + end + + private + # Strip out that internal data. def strip_internal newvals = values.dup diff --git a/spec/unit/indirector/catalog/compiler_spec.rb b/spec/unit/indirector/catalog/compiler_spec.rb index a9c2e3e28..f9980807a 100755 --- a/spec/unit/indirector/catalog/compiler_spec.rb +++ b/spec/unit/indirector/catalog/compiler_spec.rb @@ -167,12 +167,17 @@ describe Puppet::Resource::Catalog::Compiler do @compiler.extract_facts_from_request(@request) end - it "should use the Facts class to deserialize the provided facts" do + it "should use the Facts class to deserialize the provided facts and update the timestamp" do @request.options[:facts_format] = "foo" @request.options[:facts] = "bar" Puppet::Node::Facts.expects(:convert_from).returns @facts + @facts.timestamp = Time.parse('2010-11-01') + @now = Time.parse('2010-11-02') + Time.expects(:now).returns(@now) + @compiler.extract_facts_from_request(@request) + @facts.timestamp.should == @now end it "should use the provided fact format" do |