diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-13 16:24:43 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-13 16:24:43 +0000 |
commit | a5f4f53266569c2b00383993670334a6ae9b7fd0 (patch) | |
tree | 500630cc316160381f97975f83d2589dc6a34fca | |
parent | 0c0936be7cf6b02c11ce931fd2b830392bfc2329 (diff) | |
download | puppet-a5f4f53266569c2b00383993670334a6ae9b7fd0.tar.gz puppet-a5f4f53266569c2b00383993670334a6ae9b7fd0.tar.xz puppet-a5f4f53266569c2b00383993670334a6ae9b7fd0.zip |
Fixing #261. Applied patch, with small modifications.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1579 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r-- | lib/puppet/provider.rb | 7 | ||||
-rw-r--r-- | lib/puppet/type.rb | 15 | ||||
-rw-r--r-- | test/types/type.rb | 21 |
3 files changed, 33 insertions, 10 deletions
diff --git a/lib/puppet/provider.rb b/lib/puppet/provider.rb index c303aae2e..16f3ad23a 100644 --- a/lib/puppet/provider.rb +++ b/lib/puppet/provider.rb @@ -79,7 +79,12 @@ class Puppet::Provider # Does this implementation match all of the default requirements? def self.default? if @defaults.find do |fact, value| - Facter[fact].value.to_s.downcase.intern != value.to_s.downcase.intern + fval = Facter.value(fact) + if fval + fval.to_s.downcase.intern != value.to_s.downcase.intern + else + false + end end return false else diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index 07510faa7..83920bf74 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -425,16 +425,13 @@ class Type < Puppet::Element unless defined? @defaultprovider and @defaultprovider suitable = suitableprovider() - max = 0 - suitable.each do |provider| - if provider.defaultnum > max - max = provider.defaultnum - end - end + # Find which providers are a default for this system. + defaults = suitable.find_all { |provider| provider.default? } - defaults = suitable.find_all do |provider| - provider.defaultnum == max - end + # If we don't have any default we use suitable providers + defaults = suitable if defaults.empty? + max = defaults.collect { |provider| provider.defaultnum }.max + defaults = defaults.find_all { |provider| provider.defaultnum == max } retval = nil if defaults.length > 1 diff --git a/test/types/type.rb b/test/types/type.rb index b87ca2bd5..a98ab26ae 100644 --- a/test/types/type.rb +++ b/test/types/type.rb @@ -685,6 +685,27 @@ end assert_equal(obj, fileobj[path], "Could not retrieve obj by name") end + + # Make sure default providers behave correctly + def test_defaultproviders + # Make a fake type + type = Puppet::Type.newtype(:defaultprovidertest) do + end + + basic = type.provide(:basic) do + defaultfor :operatingsystem => :somethingelse, + :operatingsystemrelease => :yayness + end + + assert_equal(basic, type.defaultprovider) + type.defaultprovider = nil + + greater = type.provide(:greater) do + defaultfor :operatingsystem => Facter.value("operatingsystem") + end + + assert_equal(greater, type.defaultprovider) + end end # $Id$ |