]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Revert "Revert "Merge branch 'haus-add_pe_facts_to_stdlib' into 2.4.x""
authorJeff McCune <jeff@puppetlabs.com>
Thu, 25 Oct 2012 17:46:57 +0000 (10:46 -0700)
committerJeff McCune <jeff@puppetlabs.com>
Thu, 25 Oct 2012 17:46:57 +0000 (10:46 -0700)
This reverts commit d6d23b495cda0e154b4e73982acc43e586564c0e.

This backwards-compatible additional functionality is targeted at the
next minor release.  There are already backwards-incompatible changes in
the master branch so we need to establish a new minor branch.

lib/facter/pe_version.rb [new file with mode: 0644]
spec/spec_helper.rb
spec/unit/facter/pe_version_spec.rb [new file with mode: 0644]

diff --git a/lib/facter/pe_version.rb b/lib/facter/pe_version.rb
new file mode 100644 (file)
index 0000000..0cc0f64
--- /dev/null
@@ -0,0 +1,53 @@
+# Fact: is_pe, pe_version, pe_major_version, pe_minor_version, pe_patch_version
+#
+# Purpose: Return various facts about the PE state of the system
+#
+# Resolution: Uses a regex match against puppetversion to determine whether the
+#   machine has Puppet Enterprise installed, and what version (overall, major,
+#   minor, patch) is installed.
+#
+# Caveats:
+#
+Facter.add("pe_version") do
+  setcode do
+    pe_ver = Facter.value("puppetversion").match(/Puppet Enterprise (\d+\.\d+\.\d+)/)
+    pe_ver[1] if pe_ver
+  end
+end
+
+Facter.add("is_pe") do
+  setcode do
+    if Facter.value(:pe_version).to_s.empty? then
+      false
+    else
+      true
+    end
+  end
+end
+
+Facter.add("pe_major_version") do
+  confine :is_pe => true
+  setcode do
+    if pe_version = Facter.value(:pe_version)
+      pe_version.to_s.split('.')[0]
+    end
+  end
+end
+
+Facter.add("pe_minor_version") do
+  confine :is_pe => true
+  setcode do
+    if pe_version = Facter.value(:pe_version)
+      pe_version.to_s.split('.')[1]
+    end
+  end
+end
+
+Facter.add("pe_patch_version") do
+  confine :is_pe => true
+  setcode do
+    if pe_version = Facter.value(:pe_version)
+      pe_version.to_s.split('.')[2]
+    end
+  end
+end
index 8ae9ad32901206efcb36d373c76a0bc15bd59472..931d35c846949690e66963f65765f069c9eb55ef 100644 (file)
@@ -12,3 +12,17 @@ require 'rspec/expectations'
 
 require 'puppetlabs_spec_helper/module_spec_helper'
 
+RSpec.configure do |config|
+  # FIXME REVISIT - We may want to delegate to Facter like we do in
+  # Puppet::PuppetSpecInitializer.initialize_via_testhelper(config) because
+  # this behavior is a duplication of the spec_helper in Facter.
+  config.before :each do
+    # Ensure that we don't accidentally cache facts and environment between
+    # test cases.  This requires each example group to explicitly load the
+    # facts being exercised with something like
+    # Facter.collection.loader.load(:ipaddress)
+    Facter::Util::Loader.any_instance.stubs(:load_all)
+    Facter.clear
+    Facter.clear_messages
+  end
+end
diff --git a/spec/unit/facter/pe_version_spec.rb b/spec/unit/facter/pe_version_spec.rb
new file mode 100644 (file)
index 0000000..202a0e5
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env rspec
+
+require 'spec_helper'
+
+describe "PE Version specs" do
+  before :each do
+    Facter.collection.loader.load(:pe_version)
+  end
+
+  context "If PE is installed" do
+    %w{ 2.6.1 2.10.300 }.each do |version|
+      puppetversion = "2.7.19 (Puppet Enterprise #{version})"
+      context "puppetversion => #{puppetversion}" do
+        before :each do
+          Facter.fact(:puppetversion).stubs(:value).returns(puppetversion)
+        end
+
+        (major,minor,patch) = version.split(".")
+
+        it "Should return true" do
+          Facter.fact(:is_pe).value.should == true
+        end
+
+        it "Should have a version of #{version}" do
+          Facter.fact(:pe_version).value.should == version
+        end
+
+        it "Should have a major version of #{major}" do
+          Facter.fact(:pe_major_version).value.should == major
+        end
+
+        it "Should have a minor version of #{minor}" do
+          Facter.fact(:pe_minor_version).value.should == minor
+        end
+
+        it "Should have a patch version of #{patch}" do
+          Facter.fact(:pe_patch_version).value.should == patch
+        end
+      end
+    end
+  end
+
+  context "When PE is not installed" do
+    before :each do
+      Facter.fact(:puppetversion).stubs(:value).returns("2.7.19")
+    end
+
+    it "is_pe is false" do
+      Facter.fact(:is_pe).value.should == false
+    end
+
+    it "pe_version is nil" do
+      Facter.fact(:pe_version).value.should be_nil
+    end
+
+    it "pe_major_version is nil" do
+      Facter.fact(:pe_major_version).value.should be_nil
+    end
+
+    it "pe_minor_version is nil" do
+      Facter.fact(:pe_minor_version).value.should be_nil
+    end
+
+    it "Should have a patch version" do
+      Facter.fact(:pe_patch_version).value.should be_nil
+    end
+  end
+end