diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-12-28 17:18:55 -0800 |
---|---|---|
committer | Jesse Wolfe <jes5199@gmail.com> | 2011-01-03 11:30:02 -0800 |
commit | 06a8d1ee8775ba8693ced002f5972bbfc346ebf8 (patch) | |
tree | 7c91aeb9a4055af0de5d6cd884de9540941e9927 | |
parent | 4664460e0a4a935dab814a3218fc054c13e3cab6 (diff) | |
download | puppet-06a8d1ee8775ba8693ced002f5972bbfc346ebf8.tar.gz puppet-06a8d1ee8775ba8693ced002f5972bbfc346ebf8.tar.xz puppet-06a8d1ee8775ba8693ced002f5972bbfc346ebf8.zip |
Fix #5698 puppet inspect shouldn't report of attributes of deleted files
If a resource is absent, then reporting that its properties are all
":absent" is not particularly correct. This patch makes the `inspect`
application's reports behave more like `apply` reports, and skip
properties other than :ensure for absent resources.
Reviewed-By: Nick Lewis <nick@puppetlabs.com>
-rw-r--r-- | lib/puppet/application/inspect.rb | 8 | ||||
-rw-r--r-- | lib/puppet/reports/http.rb | 2 | ||||
-rw-r--r-- | spec/unit/application/inspect_spec.rb | 25 |
3 files changed, 31 insertions, 4 deletions
diff --git a/lib/puppet/application/inspect.rb b/lib/puppet/application/inspect.rb index caa32a7c2..342b8daae 100644 --- a/lib/puppet/application/inspect.rb +++ b/lib/puppet/application/inspect.rb @@ -64,8 +64,12 @@ class Puppet::Application::Inspect < Puppet::Application status = Puppet::Resource::Status.new(ral_resource) audited_attributes.each do |name| - event = ral_resource.event(:previous_value => audited_resource[name], :property => name, :status => "audit", :message => "inspected value is #{audited_resource[name].inspect}") - status.add_event(event) + next if audited_resource[name].nil? + # Skip :absent properties of :absent resources. Really, it would be nicer if the RAL returned nil for those, but it doesn't. ~JW + if name == :ensure or audited_resource[:ensure] != :absent or audited_resource[name] != :absent + event = ral_resource.event(:previous_value => audited_resource[name], :property => name, :status => "audit", :message => "inspected value is #{audited_resource[name].inspect}") + status.add_event(event) + end end @report.add_resource_status(status) end diff --git a/lib/puppet/reports/http.rb b/lib/puppet/reports/http.rb index 7ac54dfbd..101c8e0cb 100644 --- a/lib/puppet/reports/http.rb +++ b/lib/puppet/reports/http.rb @@ -15,7 +15,7 @@ Puppet::Reports.register_report(:http) do req = Net::HTTP::Post.new(url.path) req.body = self.to_yaml req.content_type = "application/x-yaml" - Net::HTTP.new(url.host, url.port).start {|http| + p Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } end diff --git a/spec/unit/application/inspect_spec.rb b/spec/unit/application/inspect_spec.rb index a3cc74d86..b931708c3 100644 --- a/spec/unit/application/inspect_spec.rb +++ b/spec/unit/application/inspect_spec.rb @@ -51,7 +51,7 @@ describe Puppet::Application::Inspect do catalog = Puppet::Resource::Catalog.new file = Tempfile.new("foo") file.puts("file contents") - file.flush + file.close resource = Puppet::Resource.new(:file, file.path, :parameters => {:audit => "all"}) catalog.add_resource(resource) Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(catalog) @@ -69,6 +69,29 @@ describe Puppet::Application::Inspect do end properties["ensure"].should == :file properties["content"].should == "{md5}#{Digest::MD5.hexdigest("file contents\n")}" + properties.has_key?("target").should == false + end + + it "should not report irrelevent attributes if the resource is absent" do + catalog = Puppet::Resource::Catalog.new + file = Tempfile.new("foo") + resource = Puppet::Resource.new(:file, file.path, :parameters => {:audit => "all"}) + file.delete + catalog.add_resource(resource) + Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(catalog) + + events = nil + + Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request| + events = request.instance.resource_statuses.values.first.events + end + + @inspect.run_command + + properties = events.inject({}) do |property_values, event| + property_values.merge(event.property => event.previous_value) + end + properties.should == {"ensure" => :absent} end end |