facter 1.3.8 → 1.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of facter might be problematic. Click here for more details.
- data/CHANGELOG +68 -0
- data/README +1 -1
- data/Rakefile +2 -1
- data/bin/facter +16 -11
- data/lib/facter.rb +55 -1001
- data/lib/facter/Cfkey.rb +42 -0
- data/lib/facter/architecture.rb +14 -0
- data/lib/facter/domain.rb +64 -0
- data/lib/facter/facterversion.rb +3 -0
- data/lib/facter/fqdn.rb +10 -0
- data/lib/facter/hardwareisa.rb +4 -0
- data/lib/facter/hardwaremodel.rb +13 -0
- data/lib/facter/hostname.rb +25 -0
- data/lib/facter/id.rb +4 -0
- data/lib/facter/ipaddress.rb +151 -0
- data/lib/facter/iphostnumber.rb +18 -0
- data/lib/facter/ipmess.rb +64 -74
- data/lib/facter/kernel.rb +3 -0
- data/lib/facter/kernelrelease.rb +8 -0
- data/lib/facter/lsb.rb +37 -0
- data/lib/facter/lsbmajdistrelease.rb +15 -0
- data/lib/facter/macaddress.rb +65 -0
- data/lib/facter/macosx.rb +25 -55
- data/lib/facter/manufacturer.rb +7 -45
- data/lib/facter/memory.rb +26 -49
- data/lib/facter/netmask.rb +17 -0
- data/lib/facter/operatingsystem.rb +37 -0
- data/lib/facter/operatingsystemrelease.rb +63 -0
- data/lib/facter/processor.rb +36 -14
- data/lib/facter/ps.rb +8 -0
- data/lib/facter/puppetversion.rb +10 -0
- data/lib/facter/rubysitedir.rb +8 -0
- data/lib/facter/rubyversion.rb +3 -0
- data/lib/facter/ssh.rb +33 -0
- data/lib/facter/uniqueid.rb +4 -0
- data/lib/facter/util/collection.rb +126 -0
- data/lib/facter/util/confine.rb +41 -0
- data/lib/facter/util/fact.rb +122 -0
- data/lib/facter/util/ip.rb +98 -0
- data/lib/facter/util/loader.rb +96 -0
- data/lib/facter/util/macosx.rb +50 -0
- data/lib/facter/util/manufacturer.rb +39 -0
- data/lib/facter/util/memory.rb +54 -0
- data/lib/facter/util/netmask.rb +36 -0
- data/lib/facter/util/resolution.rb +125 -0
- metadata +76 -34
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'facter'
|
2
|
+
|
3
|
+
# Load facts on demand.
|
4
|
+
class Facter::Util::Loader
|
5
|
+
# Load all resolutions for a single fact.
|
6
|
+
def load(fact)
|
7
|
+
# Now load from the search path
|
8
|
+
shortname = fact.to_s.downcase
|
9
|
+
load_env(shortname)
|
10
|
+
|
11
|
+
filename = shortname + ".rb"
|
12
|
+
search_path.each do |dir|
|
13
|
+
# Load individual files
|
14
|
+
file = File.join(dir, filename)
|
15
|
+
|
16
|
+
load_file(file) if FileTest.exist?(file)
|
17
|
+
|
18
|
+
# And load any directories matching the name
|
19
|
+
factdir = File.join(dir, shortname)
|
20
|
+
load_dir(factdir) if FileTest.directory?(factdir)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Load all facts from all directories.
|
25
|
+
def load_all
|
26
|
+
return if defined?(@loaded_all)
|
27
|
+
|
28
|
+
load_env
|
29
|
+
|
30
|
+
search_path.each do |dir|
|
31
|
+
next unless FileTest.directory?(dir)
|
32
|
+
|
33
|
+
Dir.entries(dir).each do |file|
|
34
|
+
path = File.join(dir, file)
|
35
|
+
if File.directory?(path)
|
36
|
+
load_dir(path)
|
37
|
+
elsif file =~ /\.rb$/
|
38
|
+
load_file(File.join(dir, file))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
@loaded_all = true
|
44
|
+
end
|
45
|
+
|
46
|
+
# The list of directories we're going to search through for facts.
|
47
|
+
def search_path
|
48
|
+
result = []
|
49
|
+
result += $LOAD_PATH.collect { |d| File.join(d, "facter") }
|
50
|
+
if ENV.include?("FACTERLIB")
|
51
|
+
result += ENV["FACTERLIB"].split(":")
|
52
|
+
end
|
53
|
+
|
54
|
+
# This allows others to register additional paths we should search.
|
55
|
+
result += Facter.search_path
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def load_dir(dir)
|
63
|
+
return if dir =~ /\/\.+$/ or dir =~ /\/util$/ or dir =~ /\/lib$/
|
64
|
+
|
65
|
+
Dir.entries(dir).find_all { |f| f =~ /\.rb$/ }.each do |file|
|
66
|
+
load_file(File.join(dir, file))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_file(file)
|
71
|
+
# We have to specify Kernel.load, because we have a load method.
|
72
|
+
Kernel.load(file)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Load facts from the environment. If no name is provided,
|
76
|
+
# all will be loaded.
|
77
|
+
def load_env(fact = nil)
|
78
|
+
# Load from the environment, if possible
|
79
|
+
ENV.each do |name, value|
|
80
|
+
# Skip anything that doesn't match our regex.
|
81
|
+
next unless name =~ /^facter_?(\w+)$/i
|
82
|
+
env_name = $1
|
83
|
+
|
84
|
+
# If a fact name was specified, skip anything that doesn't
|
85
|
+
# match it.
|
86
|
+
next if fact and env_name != fact
|
87
|
+
|
88
|
+
Facter.add($1) do
|
89
|
+
setcode { value }
|
90
|
+
end
|
91
|
+
|
92
|
+
# Short-cut, if we are only looking for one value.
|
93
|
+
break if fact
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
## macosx.rb
|
2
|
+
## Support methods for Apple OSX facts
|
3
|
+
##
|
4
|
+
## Copyright (C) 2007 Jeff McCune
|
5
|
+
## Author: Jeff McCune <jeff.mccune@northstarlabs.net>
|
6
|
+
##
|
7
|
+
## This program is free software; you can redistribute it and/or
|
8
|
+
## modify it under the terms of the GNU General Public License
|
9
|
+
## as published by the Free Software Foundation (version 2 of the License)
|
10
|
+
## This program is distributed in the hope that it will be useful,
|
11
|
+
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
## GNU General Public License for more details.
|
14
|
+
## You should have received a copy of the GNU General Public License
|
15
|
+
## along with this program; if not, write to the Free Software
|
16
|
+
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA 02110-1301 USA
|
17
|
+
##
|
18
|
+
|
19
|
+
module Facter::Macosx
|
20
|
+
require 'thread'
|
21
|
+
require 'facter/util/plist'
|
22
|
+
|
23
|
+
# JJM I'd really like to dynamically generate these methods
|
24
|
+
# by looking at the _name key of the _items dict for each _dataType
|
25
|
+
|
26
|
+
def self.hardware_overview
|
27
|
+
# JJM Perhaps we should cache the XML data in a "class" level object.
|
28
|
+
top_level_plist = Plist::parse_xml %x{/usr/sbin/system_profiler -xml SPHardwareDataType}
|
29
|
+
system_hardware = top_level_plist[0]['_items'][0]
|
30
|
+
system_hardware.delete '_name'
|
31
|
+
system_hardware
|
32
|
+
end
|
33
|
+
|
34
|
+
# SPSoftwareDataType
|
35
|
+
def self.os_overview
|
36
|
+
top_level_plist = Plist::parse_xml %x{/usr/sbin/system_profiler -xml SPSoftwareDataType}
|
37
|
+
os_stuff = top_level_plist[0]['_items'][0]
|
38
|
+
os_stuff.delete '_name'
|
39
|
+
os_stuff
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.sw_vers
|
43
|
+
ver = Hash.new
|
44
|
+
[ "productName", "productVersion", "buildVersion" ].each do |option|
|
45
|
+
ver["macosx_#{option}"] = %x{sw_vers -#{option}}.strip
|
46
|
+
end
|
47
|
+
ver
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# mamufacturer.rb
|
2
|
+
# Support methods for manufacturer specific facts
|
3
|
+
|
4
|
+
module Facter::Manufacturer
|
5
|
+
def self.dmi_find_system_info(name)
|
6
|
+
case Facter.value(:kernel)
|
7
|
+
when 'Linux'
|
8
|
+
return nil unless FileTest.exists?("/usr/sbin/dmidecode")
|
9
|
+
|
10
|
+
output=%x{/usr/sbin/dmidecode 2>/dev/null}
|
11
|
+
when 'OpenBSD', 'FreeBSD'
|
12
|
+
return nil unless FileTest.exists?("/usr/local/sbin/dmidecode")
|
13
|
+
|
14
|
+
output=%x{/usr/local/sbin/dmidecode 2>/dev/null}
|
15
|
+
when 'NetBSD'
|
16
|
+
return nil unless FileTest.exists?("/usr/pkg/sbin/dmidecode")
|
17
|
+
|
18
|
+
output=%x{/usr/pkg/sbin/dmidecode 2>/dev/null}
|
19
|
+
else
|
20
|
+
return
|
21
|
+
end
|
22
|
+
name.each_pair do |key,v|
|
23
|
+
v.each do |value|
|
24
|
+
output.split("Handle").each do |line|
|
25
|
+
if line =~ /#{key}/ and line =~ /#{value} (\w.*)\n*./
|
26
|
+
result = $1
|
27
|
+
Facter.add(value.chomp(':').gsub(' ','')) do
|
28
|
+
confine :kernel => [ :linux, :freebsd, :netbsd, :openbsd ]
|
29
|
+
setcode do
|
30
|
+
result
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
## memory.rb
|
2
|
+
## Support module for memory related facts
|
3
|
+
##
|
4
|
+
## This program is free software; you can redistribute it and/or
|
5
|
+
## modify it under the terms of the GNU General Public License
|
6
|
+
## as published by the Free Software Foundation (version 2 of the License)
|
7
|
+
## This program is distributed in the hope that it will be useful,
|
8
|
+
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
10
|
+
## GNU General Public License for more details.
|
11
|
+
## You should have received a copy of the GNU General Public License
|
12
|
+
## along with this program; if not, write to the Free Software
|
13
|
+
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston MA 02110-1301 USA
|
14
|
+
##
|
15
|
+
|
16
|
+
module Facter::Memory
|
17
|
+
require 'thread'
|
18
|
+
|
19
|
+
def self.meminfo_number(tag)
|
20
|
+
memsize = ""
|
21
|
+
Thread::exclusive do
|
22
|
+
size, scale = [0, ""]
|
23
|
+
File.readlines("/proc/meminfo").each do |l|
|
24
|
+
size, scale = [$1.to_f, $2] if l =~ /^#{tag}:\s+(\d+)\s+(\S+)/
|
25
|
+
# MemoryFree == memfree + cached + buffers
|
26
|
+
# (assume scales are all the same as memfree)
|
27
|
+
if tag == "MemFree" &&
|
28
|
+
l =~ /^(?:Buffers|Cached):\s+(\d+)\s+(?:\S+)/
|
29
|
+
size += $1.to_f
|
30
|
+
end
|
31
|
+
end
|
32
|
+
memsize = scale_number(size, scale)
|
33
|
+
end
|
34
|
+
|
35
|
+
memsize
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.scale_number(size, multiplier)
|
39
|
+
suffixes = ['', 'kB', 'MB', 'GB', 'TB']
|
40
|
+
|
41
|
+
s = suffixes.shift
|
42
|
+
while s != multiplier
|
43
|
+
s = suffixes.shift
|
44
|
+
end
|
45
|
+
|
46
|
+
while size > 1024.0
|
47
|
+
size /= 1024.0
|
48
|
+
s = suffixes.shift
|
49
|
+
end
|
50
|
+
|
51
|
+
return "%.2f %s" % [size, s]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Facter::NetMask
|
2
|
+
|
3
|
+
def self.get_netmask
|
4
|
+
netmask = nil;
|
5
|
+
ipregex = %r{(\d{1,3}\.){3}\d{1,3}}
|
6
|
+
|
7
|
+
ops = nil
|
8
|
+
case Facter.value(:kernel)
|
9
|
+
when 'Linux'
|
10
|
+
ops = {
|
11
|
+
:ifconfig => '/sbin/ifconfig',
|
12
|
+
:regex => %r{\s+ inet\saddr: #{Facter.ipaddress} .*? Mask: (#{ipregex})}x,
|
13
|
+
:munge => nil,
|
14
|
+
}
|
15
|
+
when 'SunOS'
|
16
|
+
ops = {
|
17
|
+
:ifconfig => '/usr/sbin/ifconfig -a',
|
18
|
+
:regex => %r{\s+ inet\s+? #{Facter.ipaddress} \+? mask (\w{8})}x,
|
19
|
+
:munge => Proc.new { |mask| mask.scan(/../).collect do |byte| byte.to_i(16) end.join('.') }
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
%x{#{ops[:ifconfig]}}.split(/\n/).collect do |line|
|
24
|
+
matches = line.match(ops[:regex])
|
25
|
+
if !matches.nil?
|
26
|
+
if ops[:munge].nil?
|
27
|
+
netmask = matches[1]
|
28
|
+
else
|
29
|
+
netmask = ops[:munge].call(matches[1])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
netmask
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# An actual fact resolution mechanism. These are largely just chunks of
|
2
|
+
# code, with optional confinements restricting the mechanisms to only working on
|
3
|
+
# specific systems. Note that the confinements are always ANDed, so any
|
4
|
+
# confinements specified must all be true for the resolution to be
|
5
|
+
# suitable.
|
6
|
+
require 'facter/util/confine'
|
7
|
+
|
8
|
+
require 'timeout'
|
9
|
+
|
10
|
+
class Facter::Util::Resolution
|
11
|
+
attr_accessor :interpreter, :code, :name, :timeout
|
12
|
+
|
13
|
+
def self.have_which
|
14
|
+
if ! defined?(@have_which) or @have_which.nil?
|
15
|
+
%x{which which 2>/dev/null}
|
16
|
+
@have_which = ($? == 0)
|
17
|
+
end
|
18
|
+
@have_which
|
19
|
+
end
|
20
|
+
|
21
|
+
# Execute a chunk of code.
|
22
|
+
def self.exec(code, interpreter = "/bin/sh")
|
23
|
+
raise ArgumentError, "non-sh interpreters are not currently supported" unless interpreter == "/bin/sh"
|
24
|
+
binary = code.split(/\s+/).shift
|
25
|
+
|
26
|
+
if have_which
|
27
|
+
path = nil
|
28
|
+
if binary !~ /^\//
|
29
|
+
path = %x{which #{binary} 2>/dev/null}.chomp
|
30
|
+
# we don't have the binary necessary
|
31
|
+
return nil if path == ""
|
32
|
+
else
|
33
|
+
path = binary
|
34
|
+
end
|
35
|
+
|
36
|
+
return nil unless FileTest.exists?(path)
|
37
|
+
end
|
38
|
+
|
39
|
+
out = nil
|
40
|
+
begin
|
41
|
+
out = %x{#{code}}.chomp
|
42
|
+
rescue => detail
|
43
|
+
$stderr.puts detail
|
44
|
+
return nil
|
45
|
+
end
|
46
|
+
if out == ""
|
47
|
+
return nil
|
48
|
+
else
|
49
|
+
return out
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Add a new confine to the resolution mechanism.
|
54
|
+
def confine(confines)
|
55
|
+
confines.each do |fact, values|
|
56
|
+
@confines.push Facter::Util::Confine.new(fact, *values)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Create a new resolution mechanism.
|
61
|
+
def initialize(name)
|
62
|
+
@name = name
|
63
|
+
@confines = []
|
64
|
+
@value = nil
|
65
|
+
@timeout = 0.5
|
66
|
+
end
|
67
|
+
|
68
|
+
# Return the number of confines.
|
69
|
+
def length
|
70
|
+
@confines.length
|
71
|
+
end
|
72
|
+
|
73
|
+
# We need this as a getter for 'timeout', because some versions
|
74
|
+
# of ruby seem to already have a 'timeout' method and we can't
|
75
|
+
# seem to override the instance methods, somehow.
|
76
|
+
def limit
|
77
|
+
@timeout
|
78
|
+
end
|
79
|
+
|
80
|
+
# Set our code for returning a value.
|
81
|
+
def setcode(string = nil, interp = nil, &block)
|
82
|
+
if string
|
83
|
+
@code = string
|
84
|
+
@interpreter = interp || "/bin/sh"
|
85
|
+
else
|
86
|
+
unless block_given?
|
87
|
+
raise ArgumentError, "You must pass either code or a block"
|
88
|
+
end
|
89
|
+
@code = block
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Is this resolution mechanism suitable on the system in question?
|
94
|
+
def suitable?
|
95
|
+
unless defined? @suitable
|
96
|
+
@suitable = ! @confines.detect { |confine| ! confine.true? }
|
97
|
+
end
|
98
|
+
|
99
|
+
return @suitable
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_s
|
103
|
+
return self.value()
|
104
|
+
end
|
105
|
+
|
106
|
+
# How we get a value for our resolution mechanism.
|
107
|
+
def value
|
108
|
+
result = nil
|
109
|
+
begin
|
110
|
+
Timeout.timeout(limit) do
|
111
|
+
if @code.is_a?(Proc)
|
112
|
+
result = @code.call()
|
113
|
+
else
|
114
|
+
result = Facter::Util::Resolution.exec(@code,@interpreter)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
rescue Timeout::Error => detail
|
118
|
+
warn "Timed out seeking value for %s" % self.name
|
119
|
+
return nil
|
120
|
+
end
|
121
|
+
|
122
|
+
return nil if result == ""
|
123
|
+
return result
|
124
|
+
end
|
125
|
+
end
|
metadata
CHANGED
@@ -1,33 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: facter
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2007-09-24 00:00:00 +02:00
|
8
|
-
summary: Facter collects Operating system facts.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: dev@reductivelabs.com
|
12
|
-
homepage: http://reductivelabs.com/projects/facter
|
13
|
-
rubyforge_project: facter
|
14
|
-
description: Facter is a module for collecting simple facts about a host Operating system.
|
15
|
-
autorequire:
|
16
|
-
default_executable: facter
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: false
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: "1.5"
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
|
-
-
|
7
|
+
- Luke Kanies
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-07-08 00:00:00 +02:00
|
13
|
+
default_executable: facter
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Facter is a module for collecting simple facts about a host Operating system.
|
17
|
+
email: dev@reductivelabs.com
|
18
|
+
executables:
|
19
|
+
- facter
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
25
|
- install.rb
|
33
26
|
- COPYING
|
@@ -39,26 +32,75 @@ files:
|
|
39
32
|
- CHANGELOG
|
40
33
|
- bin/facter
|
41
34
|
- lib/facter.rb
|
35
|
+
- lib/facter/lsb.rb
|
42
36
|
- lib/facter/processor.rb
|
37
|
+
- lib/facter/id.rb
|
38
|
+
- lib/facter/operatingsystem.rb
|
39
|
+
- lib/facter/architecture.rb
|
40
|
+
- lib/facter/operatingsystemrelease.rb
|
41
|
+
- lib/facter/domain.rb
|
42
|
+
- lib/facter/uniqueid.rb
|
43
43
|
- lib/facter/memory.rb
|
44
|
+
- lib/facter/hardwareisa.rb
|
45
|
+
- lib/facter/facterversion.rb
|
46
|
+
- lib/facter/ps.rb
|
47
|
+
- lib/facter/rubysitedir.rb
|
48
|
+
- lib/facter/hostname.rb
|
49
|
+
- lib/facter/iphostnumber.rb
|
50
|
+
- lib/facter/rubyversion.rb
|
51
|
+
- lib/facter/Cfkey.rb
|
52
|
+
- lib/facter/lsbmajdistrelease.rb
|
53
|
+
- lib/facter/hardwaremodel.rb
|
54
|
+
- lib/facter/macaddress.rb
|
55
|
+
- lib/facter/util/resolution.rb
|
56
|
+
- lib/facter/util/collection.rb
|
57
|
+
- lib/facter/util/confine.rb
|
58
|
+
- lib/facter/util/loader.rb
|
59
|
+
- lib/facter/util/memory.rb
|
60
|
+
- lib/facter/util/fact.rb
|
44
61
|
- lib/facter/util/plist.rb
|
62
|
+
- lib/facter/util/macosx.rb
|
63
|
+
- lib/facter/util/ip.rb
|
45
64
|
- lib/facter/util/plist/parser.rb
|
46
65
|
- lib/facter/util/plist/generator.rb
|
66
|
+
- lib/facter/util/manufacturer.rb
|
67
|
+
- lib/facter/util/netmask.rb
|
68
|
+
- lib/facter/fqdn.rb
|
69
|
+
- lib/facter/ssh.rb
|
70
|
+
- lib/facter/ipaddress.rb
|
71
|
+
- lib/facter/puppetversion.rb
|
47
72
|
- lib/facter/macosx.rb
|
73
|
+
- lib/facter/kernelrelease.rb
|
48
74
|
- lib/facter/manufacturer.rb
|
75
|
+
- lib/facter/kernel.rb
|
49
76
|
- lib/facter/ipmess.rb
|
77
|
+
- lib/facter/netmask.rb
|
50
78
|
- etc/facter.conf
|
51
|
-
|
52
|
-
|
79
|
+
has_rdoc: false
|
80
|
+
homepage: http://reductivelabs.com/projects/facter
|
81
|
+
post_install_message:
|
53
82
|
rdoc_options: []
|
54
83
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
91
|
+
version:
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: "0"
|
97
|
+
version:
|
61
98
|
requirements: []
|
62
99
|
|
63
|
-
|
100
|
+
rubyforge_project: facter
|
101
|
+
rubygems_version: 1.0.1
|
102
|
+
signing_key:
|
103
|
+
specification_version: 2
|
104
|
+
summary: Facter collects Operating system facts.
|
105
|
+
test_files: []
|
64
106
|
|