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 <[email protected]> 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 [email protected].
> To post to this group, send email to [email protected].
> 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
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-dev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.