From 3e13bd59689a27a393c847bdbed3ac38765d79e9 Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Tue, 20 May 2008 10:13:33 -0500 Subject: Intermediate commit so I can move on to other things. --- lib/puppet/provider/group/ldap.rb | 2 +- lib/puppet/provider/user/ldap.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/provider/group/ldap.rb b/lib/puppet/provider/group/ldap.rb index 632358ff1..5af400a4e 100644 --- a/lib/puppet/provider/group/ldap.rb +++ b/lib/puppet/provider/group/ldap.rb @@ -12,7 +12,7 @@ Puppet::Type.type(:group).provide :ldap, :parent => Puppet::Provider::Ldap do as it iterates across all existing groups to pick the appropriate next one." - confine :true => Puppet.features.ldap? + confine :true => Puppet.features.ldap?, :false => (Puppet[:ldapuser] == "") # We're mapping 'members' here because we want to make it # easy for the ldap user provider to manage groups. This diff --git a/lib/puppet/provider/user/ldap.rb b/lib/puppet/provider/user/ldap.rb index ba91a871e..d670ad435 100644 --- a/lib/puppet/provider/user/ldap.rb +++ b/lib/puppet/provider/user/ldap.rb @@ -12,7 +12,7 @@ Puppet::Type.type(:user).provide :ldap, :parent => Puppet::Provider::Ldap do as it iterates across all existing users to pick the appropriate next one." - confine :true => Puppet.features.ldap? + confine :feature => :ldap, :false => (Puppet[:ldapuser] == "") manages(:posixAccount, :person).at("ou=People").named_by(:uid).and.maps :name => :uid, :password => :userPassword, -- cgit From 419f2443c40116623b5c82f03eafcc85deeabcad Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Tue, 20 May 2008 23:59:04 -0500 Subject: Adding support for settings within the existing Facter provider confines. This renames the 'facter' confine to 'variable', and it prefers settings to facts. There shouldn't really be any overlap, so it shouldn't be a problem. --- lib/puppet/provider/confine/facter.rb | 37 --------------------------- lib/puppet/provider/confine/variable.rb | 42 +++++++++++++++++++++++++++++++ lib/puppet/provider/confine_collection.rb | 4 +-- lib/puppet/reference/providers.rb | 8 ++++-- 4 files changed, 50 insertions(+), 41 deletions(-) delete mode 100644 lib/puppet/provider/confine/facter.rb create mode 100644 lib/puppet/provider/confine/variable.rb (limited to 'lib/puppet') diff --git a/lib/puppet/provider/confine/facter.rb b/lib/puppet/provider/confine/facter.rb deleted file mode 100644 index 9bb66c058..000000000 --- a/lib/puppet/provider/confine/facter.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'puppet/provider/confine' - -class Puppet::Provider::Confine::Facter < Puppet::Provider::Confine - def self.summarize(confines) - result = Hash.new { |hash, key| hash[key] = [] } - confines.inject(result) { |total, confine| total[confine.fact] += confine.values unless confine.valid?; total } - end - - attr_accessor :fact - - # Are we a facter comparison? - def facter? - defined?(@facter) - end - - # Retrieve the value from facter - def facter_value - unless defined?(@facter_value) and @facter_value - @facter_value = ::Facter.value(@fact).to_s.downcase - end - @facter_value - end - - def message(value) - "facter value '%s' for '%s' not in required list '%s'" % [value, self.fact, values.join(",")] - end - - def pass?(value) - facter_value == value.to_s.downcase - end - - def reset - # Reset the cache. We want to cache it during a given - # run, but across runs. - @facter_value = nil - end -end diff --git a/lib/puppet/provider/confine/variable.rb b/lib/puppet/provider/confine/variable.rb new file mode 100644 index 000000000..84d17367a --- /dev/null +++ b/lib/puppet/provider/confine/variable.rb @@ -0,0 +1,42 @@ +require 'puppet/provider/confine' + +class Puppet::Provider::Confine::Variable < Puppet::Provider::Confine + def self.summarize(confines) + result = Hash.new { |hash, key| hash[key] = [] } + confines.inject(result) { |total, confine| total[confine.fact] += confine.values unless confine.valid?; total } + end + + attr_accessor :name + + # Retrieve the value from facter + def facter_value + unless defined?(@facter_value) and @facter_value + @facter_value = ::Facter.value(name).to_s.downcase + end + @facter_value + end + + def message(value) + "facter value '%s' for '%s' not in required list '%s'" % [value, self.name, values.join(",")] + end + + def pass?(value) + test_value.downcase.to_s == value.to_s.downcase + end + + def reset + # Reset the cache. We want to cache it during a given + # run, but across runs. + @facter_value = nil + end + + private + + def setting? + Puppet.settings.valid?(name) + end + + def test_value + setting? ? Puppet.settings[name] : facter_value + end +end diff --git a/lib/puppet/provider/confine_collection.rb b/lib/puppet/provider/confine_collection.rb index 0c80086c9..35f461acb 100644 --- a/lib/puppet/provider/confine_collection.rb +++ b/lib/puppet/provider/confine_collection.rb @@ -15,8 +15,8 @@ class Puppet::Provider::ConfineCollection @confines << klass.new(values) @confines[-1].for_binary = true if for_binary else - confine = Puppet::Provider::Confine.test(:facter).new(values) - confine.fact = test + confine = Puppet::Provider::Confine.test(:variable).new(values) + confine.name = test @confines << confine end end diff --git a/lib/puppet/reference/providers.rb b/lib/puppet/reference/providers.rb index 610c7550d..8fd2dbadc 100644 --- a/lib/puppet/reference/providers.rb +++ b/lib/puppet/reference/providers.rb @@ -63,9 +63,13 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider case test when :exists: details += " - Missing files %s\n" % values.join(", ") - when :facter: + when :variable: values.each do |name, facts| - details += " - Fact %s (currently %s) not in list %s\n" % [name, Facter.value(name).inspect, facts.join(", ")] + if Puppet.settings.valid?(name) + details += " - Setting %s (currently %s) not in list %s\n" % [name, Puppet.settings.value(name).inspect, facts.join(", ")] + else + details += " - Fact %s (currently %s) not in list %s\n" % [name, Facter.value(name).inspect, facts.join(", ")] + end end when :true: details += " - Got %s true tests that should have been false\n" % values -- cgit From 4434072c7f51e4720b40aaea0637cb94dc6aefe5 Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Wed, 21 May 2008 00:30:24 -0500 Subject: The ldap user/group providers now work when no users/groups are in ldap yet. Previously, they failed if you tried to get them to autogenerate an id, because they assumed that a result would be returned. --- lib/puppet/provider/group/ldap.rb | 14 ++++++++------ lib/puppet/provider/user/ldap.rb | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/provider/group/ldap.rb b/lib/puppet/provider/group/ldap.rb index 5af400a4e..a4870fc68 100644 --- a/lib/puppet/provider/group/ldap.rb +++ b/lib/puppet/provider/group/ldap.rb @@ -23,12 +23,14 @@ Puppet::Type.type(:group).provide :ldap, :parent => Puppet::Provider::Ldap do # Find the next gid after the current largest gid. provider = self manager.generates(:gidNumber).with do - largest = 0 - provider.manager.search.each do |hash| - next unless value = hash[:gid] - num = value[0].to_i - if num > largest - largest = num + largest = 500 + if existing = provider.manager.search + existing.each do |hash| + next unless value = hash[:gid] + num = value[0].to_i + if num > largest + largest = num + end end end largest + 1 diff --git a/lib/puppet/provider/user/ldap.rb b/lib/puppet/provider/user/ldap.rb index d670ad435..0d149ac9a 100644 --- a/lib/puppet/provider/user/ldap.rb +++ b/lib/puppet/provider/user/ldap.rb @@ -32,12 +32,14 @@ Puppet::Type.type(:user).provide :ldap, :parent => Puppet::Provider::Ldap do # Find the next uid after the current largest uid. provider = self manager.generates(:uidNumber).with do - largest = 0 - provider.manager.search.each do |hash| - next unless value = hash[:uid] - num = value[0].to_i - if num > largest - largest = num + largest = 500 + if existing = provider.manager.search + existing.each do |hash| + next unless value = hash[:uid] + num = value[0].to_i + if num > largest + largest = num + end end end largest + 1 -- cgit