Re: [Puppet-dev] Is Puppet::Provider::Package#query required?

43 views
Skip to first unread message
Message has been deleted

Adrien Thebo

unread,
May 21, 2013, 1:38:41 PM5/21/13
to puppe...@googlegroups.com
It looks like PackageProvider#query is being called in the #properties method at (https://github.com/puppetlabs/puppet/blob/master/lib/puppet/provider/package.rb#L19). I deleted that method and ran the specs to see what blows up:

  1) Package provider gem should be able to get a list of existing packages
     Failure/Error: package.properties[:provider].should == provider.name
     NoMethodError:
       undefined method `properties' for (provider=gem):Puppet::Type::Package::ProviderGem
     # ./spec/integration/provider/package_spec.rb:39:in `block (5 levels) in <top (required)>'
     # ./spec/integration/provider/package_spec.rb:37:in `each'
     # ./spec/integration/provider/package_spec.rb:37:in `block (4 levels) in <top (required)>'

  2) Puppet::Type::Package::ProviderPip query should return a hash when pip and the package are present
     Failure/Error: @provider.query.should == {
     NoMethodError:
       undefined method `properties' for (provider=pip):Puppet::Type::Package::ProviderPip
     # ./lib/puppet/provider/package/pip.rb:51:in `block in query'
     # ./lib/puppet/provider/package/pip.rb:50:in `each'
     # ./lib/puppet/provider/package/pip.rb:50:in `query'
     # ./spec/unit/provider/package/pip_spec.rb:81:in `block (3 levels) in <top (required)>'

  3) Puppet::Type::Package::ProviderMsi#uninstall should require the productcode
     Failure/Error: expect do
       expected Puppet::Error with message matching /The productcode property is missing./, got #<NameError: undefined local variable or method `properties' for Package[mysql-5.1.58-win-x64](provider=msi):Puppet::Type::Package::ProviderMsi>
     # ./spec/unit/provider/package/msi_spec.rb:156:in `block (3 levels) in <top (required)>'

  4) Puppet::Type::Package::ProviderMsi#uninstall should uninstall using the productcode
     Failure/Error: provider.uninstall
     NameError:
       undefined local variable or method `properties' for Package[mysql-5.1.58-win-x64](provider=msi):Puppet::Type::Package::ProviderMsi
     # ./lib/puppet/provider/package/msi.rb:83:in `uninstall'
     # ./spec/unit/provider/package/msi_spec.rb:165:in `block (3 levels) in <top (required)>'

  5) Puppet::Type::Package::ProviderMsi#uninstall should warn if the package requests a reboot
     Failure/Error: provider.uninstall
     NameError:
       undefined local variable or method `properties' for Package[mysql-5.1.58-win-x64](provider=msi):Puppet::Type::Package::ProviderMsi
     # ./lib/puppet/provider/package/msi.rb:83:in `uninstall'
     # ./spec/unit/provider/package/msi_spec.rb:174:in `block (3 levels) in <top (required)>'

  6) Puppet::Type::Package::ProviderMsi#uninstall should warn if reboot initiated
     Failure/Error: provider.uninstall
     NameError:
       undefined local variable or method `properties' for Package[mysql-5.1.58-win-x64](provider=msi):Puppet::Type::Package::ProviderMsi
     # ./lib/puppet/provider/package/msi.rb:83:in `uninstall'
     # ./spec/unit/provider/package/msi_spec.rb:183:in `block (3 levels) in <top (required)>'

  7) Puppet::Type::Package::ProviderMsi#uninstall should warn if reboot required
     Failure/Error: provider.uninstall
     NameError:
       undefined local variable or method `properties' for Package[mysql-5.1.58-win-x64](provider=msi):Puppet::Type::Package::ProviderMsi
     # ./lib/puppet/provider/package/msi.rb:83:in `uninstall'
     # ./spec/unit/provider/package/msi_spec.rb:192:in `block (3 levels) in <top (required)>'

  8) Puppet::Type::Package::ProviderGem#instances should return ensure values as an array of installed versions
     Failure/Error: provider_class.instances.map {|p| p.properties}.should == [
     NoMethodError:
       undefined method `properties' for (provider=gem):Puppet::Type::Package::ProviderGem
     # ./spec/unit/provider/package/gem_spec.rb:127:in `block (4 levels) in <top (required)>'
     # ./spec/unit/provider/package/gem_spec.rb:127:in `map'
     # ./spec/unit/provider/package/gem_spec.rb:127:in `block (3 levels) in <top (required)>'

  9) Puppet::Type::Package::ProviderGem#instances should not fail when an unmatched line is returned
     Failure/Error: provider_class.instances.map {|p| p.properties}.
     NoMethodError:
       undefined method `properties' for (provider=gem):Puppet::Type::Package::ProviderGem
     # ./spec/unit/provider/package/gem_spec.rb:137:in `block (4 levels) in <top (required)>'
     # ./spec/unit/provider/package/gem_spec.rb:137:in `map'
     # ./spec/unit/provider/package/gem_spec.rb:137:in `block (3 levels) in <top (required)>'

  10) Puppet::Type::Package::ProviderOpkg when querying self.instances returns an array of packages
     Failure/Error: installed_packages[0].properties.should ==
     NoMethodError:
       undefined method `properties' for (provider=opkg):Puppet::Type::Package::ProviderOpkg
     # ./spec/unit/provider/package/opkg_spec.rb:143:in `block (4 levels) in <top (required)>'

  11) Puppet::Type::Package::ProviderRpm self.instances returns an array of packages
     Failure/Error: installed_packages[0].properties.should ==
     NoMethodError:
       undefined method `properties' for (provider=rpm):Puppet::Type::Package::ProviderRpm
     # ./spec/unit/provider/package/rpm_spec.rb:79:in `block (3 levels) in <top (required)>'

  12) Puppet::Type::Package::ProviderAptitude when retrieving ensure should detect absent packages
     Failure/Error: pkg.property(:ensure).retrieve.should == expect
     NoMethodError:
       undefined method `properties' for Package[faff](provider=aptitude):Puppet::Type::Package::ProviderAptitude
     # ./lib/puppet/type/package.rb:178:in `retrieve'
     # ./spec/unit/provider/package/aptitude_spec.rb:25:in `block (4 levels) in <top (required)>'

  13) Puppet::Type::Package::ProviderAptitude when retrieving ensure should detect 1.2.3-1 packages
     Failure/Error: pkg.property(:ensure).retrieve.should == expect
     NoMethodError:
       undefined method `properties' for Package[faff](provider=aptitude):Puppet::Type::Package::ProviderAptitude
     # ./lib/puppet/type/package.rb:178:in `retrieve'
     # ./spec/unit/provider/package/aptitude_spec.rb:25:in `block (4 levels) in <top (required)>'

  14) Puppet::Type::Package::ProviderPacman when fetching a package list should return installed packages with their versions
     Failure/Error: packages[0].properties.should == {
     NoMethodError:
       undefined method `properties' for (provider=pacman):Puppet::Type::Package::ProviderPacman
     # ./spec/unit/provider/package/pacman_spec.rb:201:in `block (3 levels) in <top (required)>'

  15) Puppet::Type::Package::ProviderAptrpm when retrieving ensure should report absent packages
     Failure/Error: pkg.property(:ensure).retrieve.should == :absent
     NoMethodError:
       undefined method `properties' for Package[faff](provider=aptrpm):Puppet::Type::Package::ProviderAptrpm
     # ./lib/puppet/type/package.rb:178:in `retrieve'
     # ./spec/unit/provider/package/aptrpm_spec.rb:27:in `block (3 levels) in <top (required)>'

  16) Puppet::Type::Package::ProviderAptrpm when retrieving ensure should report present packages correctly
     Failure/Error: pkg.property(:ensure).retrieve.should == "1.2.3-1-5"
     NoMethodError:
       undefined method `properties' for Package[faff](provider=aptrpm):Puppet::Type::Package::ProviderAptrpm
     # ./lib/puppet/type/package.rb:178:in `retrieve'
     # ./spec/unit/provider/package/aptrpm_spec.rb:32:in `block (3 levels) in <top (required)>'

It looks like the #query method is only called once and the #properties method serves to memoize that value. There might be other ways to implement this, but it does look like the #query method is still used heavily.


On Fri, May 17, 2013 at 12:30 PM, John E Fritz <fr...@vcu.edu> wrote:
All the package providers supplied with Puppet seem to implement or inherit the query method, but as far as we can tell, this isn't used in other parts of the system.  Is it required?

Until June 2007, it was in used by the package type (in lib/puppet/type/package.rb) in the exists? and retrieve method, but commit 73502a7 got rid of those (but left a comment mentioning query above the exists? method).

We don't want to leave out something people rely on, but we also don't want to do unnecessary cargo-culting.

John Fritz and Jim Toth

--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To post to this group, send email to puppe...@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-dev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Adrien Thebo | Puppet Labs

JE Fritz

unread,
May 21, 2013, 8:49:26 PM5/21/13
to puppe...@googlegroups.com
On Tue, May 21, 2013 at 1:38 PM, Adrien Thebo <adr...@puppetlabs.com> wrote:
It looks like PackageProvider#query is being called in the #properties method at (https://github.com/puppetlabs/puppet/blob/master/lib/puppet/provider/package.rb#L19). 
 
Ah!  Thanks.  I'd missed that query call. (After a fair amount of looking, too!  But, for that file, only with eyeballs, not grep. Ah well.)

-Fritz
Reply all
Reply to author
Forward
0 new messages