Please review pull request #787: (maint) Make Puppet have hard dependency on Facter 2.0 opened by (jeffweiss)

Description:

Puppet 3.0 requires Facter 2.0. Make the dependency hard and have Puppet
fail with a useful error message if Facter doesn't exist or is the wrong
version.

  • Opened: Tue May 15 22:31:07 UTC 2012
  • Based on: puppetlabs:master (059d4a309ab41347445ca8f32bf8cdb4d19c10ea)
  • Requested merge: jeffweiss:maint/master/make_facter_2_hard_dep (a6f204555949bf3042633b1f953de02ecdc3fe31)

Diff follows:

diff --git a/lib/puppet.rb b/lib/puppet.rb
index 7941cc8..f0814e1 100644
--- a/lib/puppet.rb
+++ b/lib/puppet.rb
@@ -149,6 +149,10 @@ def self.do_initialize_settings_for_run_mode(run_mode)
   def self.newtype(name, options = {}, &block)
     Puppet::Type.newtype(name, options, &block)
   end
+
+  # We don't want to continue if Facter is not around, or isn't feature
+  # compliant
+  exit(1) unless Puppet.features.facter?
 end
 
 # This feels weird to me; I would really like for us to get to a state where there is never a "require" statement
diff --git a/lib/puppet/feature/facter.rb b/lib/puppet/feature/facter.rb
new file mode 100644
index 0000000..5ba2f45
--- /dev/null
+++ b/lib/puppet/feature/facter.rb
@@ -0,0 +1,30 @@
+require 'puppet/util/feature'
+require 'semver'
+
+# See if Facter is available, and check revision
+Puppet.features.add(:facter) do
+  required_facter = "2.0.0"
+
+  begin
+    require 'facter'
+  rescue LoadError => err
+    begin
+      require 'rubygems'
+      require 'facter'
+    rescue LoadError => err
+    end
+  end
+
+  raise Puppet::Error, "Cannot find Facter class. Facter may not be installed, " +
+      "or not be in your RUBYLIB." unless defined?(::Facter)
+  raise Puppet::Error, "Cannot find Facter version declaration. Your " +
+        "installation of Facter may be invalid, very old or this may be a bug." unless defined?(::Facter.version)
+    
+  facter_version = ::SemVer.new(::Facter.version)
+  required_version = ::SemVer.new(required_facter)
+  raise Puppet::Error, "Found Facter version #{::Facter.version} " +
+       "however version #{required_facter} (or greater) is required for " +
+       "Puppet to operate" unless facter_version >= required_version
+       
+  true
+end
\ No newline at end of file

    

--
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.

Reply via email to