Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add pe facts to stdlib #99

Merged
merged 3 commits into from Oct 25, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
47 changes: 47 additions & 0 deletions lib/facter/pe_version.rb
@@ -0,0 +1,47 @@
# 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
Facter.value(:pe_version).split('.')[0]
end
end

Facter.add("pe_minor_version") do
confine :is_pe => true
setcode do
Facter.value(:pe_version).split('.')[1]
end
end

Facter.add("pe_patch_version") do
confine :is_pe => true
setcode do
Facter.value(:pe_version).split('.')[2]
end
end
14 changes: 14 additions & 0 deletions spec/spec_helper.rb
Expand Up @@ -12,3 +12,17 @@

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
68 changes: 68 additions & 0 deletions spec/unit/facter/pe_version_spec.rb
@@ -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