This is only for the experimental "inspect" application - this doesn't share any code with the process of actually applying the catalog. I think that the "apply"/"agent" reports (and dashboard) already correctly understand how to represent the attributes of deleted and created resources.
On Mon, Jan 3, 2011 at 12:50 PM, Luke Kanies <[email protected]> wrote: > If we delete a resource, do we not report what the properties were at > the time of deletion? That is, if I wanted to recreate the resource > from the reported info, could I? > > -- > Luke Kanies | +1-615-594-8199 > > On Jan 3, 2011, at 11:32, Jesse Wolfe <[email protected]> wrote: > > > 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 <[email protected]> > > Signed-off-by: Jesse Wolfe <[email protected]> > > --- > > lib/puppet/application/inspect.rb | 8 ++++++-- > > lib/puppet/reports/http.rb | 2 +- > > 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 caa32a7..342b8da 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 7ac54df..101c8e0 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 a3cc74d..b931708 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 > > > > -- > > 1.7.0.4 > > > > -- > > 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]<puppet-dev%[email protected]> > . > > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > > > > -- > 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]<puppet-dev%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > > -- 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.
