summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Wolfe <jes5199@gmail.com>2010-11-01 11:45:27 -0700
committerJesse Wolfe <jes5199@gmail.com>2010-11-01 11:49:41 -0700
commitfb5f859cf4a89042a1768b6cbc2dbfc43da49c99 (patch)
tree74ad789bb27f18b87bdbeaa83dfe9306105ed3a2
parent5f0cf4ef50a3676229a1c824b9a730b6951e1c7a (diff)
downloadpuppet-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.rb1
-rwxr-xr-xlib/puppet/node/facts.rb18
-rwxr-xr-xspec/unit/indirector/catalog/compiler_spec.rb7
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