summaryrefslogtreecommitdiffstats
path: root/bin/facter
blob: d5b380f94e881615a940be1547fe23737a5ac039 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/env ruby 
#
# = Synopsis
#
# Collect and display facts about the system.
#
# = Usage
#
#   facter [-d|--debug] [-h|--help] [-v|--version] [fact] [fact] [...]
#
# = Description
#
# Collect and display facts about the current system.  The library behind
# Facter is easy to expand, making Facter an easy way to collect information
# about a system from within the shell or within Ruby.
#
# If no facts are specifically asked for, then all facts will be returned.
# 
# = Options
#
# debug::
#   Enable debugging.
#
# help::
#   Print this help message
#
# version::
#   Print the version and exit.
#
# = Example
#
#   facter kernel
#
# = Author
#
# Luke Kanies
#
# = Copyright
#
# Copyright (c) 2006 Reductive Labs, LLC
# Licensed under the GNU Public License

require 'getoptlong'
require 'facter'

$haveusage = true

begin
    require 'rdoc/usage'
rescue Exception
    $haveusage = false
end

$debug = 0

config = nil

result = GetoptLong.new(
    [ "--version",         "-v",     GetoptLong::NO_ARGUMENT ],
    [ "--help",		"-h",            GetoptLong::NO_ARGUMENT ],
    [ "--debug",	"-d",            GetoptLong::NO_ARGUMENT ],
    [ "--config",    "-c",           GetoptLong::REQUIRED_ARGUMENT ]
)

result.each { |opt,arg|
    case opt
        when "--version"
            puts "%s" % Facter.version
            exit
        when "--debug"
			Facter.debugging(1)
        when "--help"
            if $haveusage
                RDoc::usage && exit
            else
                puts "No help available unless you have RDoc::usage installed"
                exit
            end
        else
            $stderr.puts "Invalid option '#{opt}'"
            exit(12)
    end
}

names = []

unless config.nil?
	File.open(config) { |file|
		names = file.readlines.collect { |line|
			line.chomp
		}
	}
end

ARGV.each { |item|
	names.push item
}

facts = {}

if names.empty?
    Facter.each { |name,fact|
        facts[name] = fact
    }
else
    names.each { |name|
        begin
            facts[name] = Facter.value(name)
        rescue => error
            STDERR.puts "Could not retrieve %s: #{error}" % name
            exit 10
        end
    }
end

facts.sort { |a, b| a[0].to_s <=> b[0].to_s }.each { |name,value|
    if facts.length == 1
        unless value.nil?
            puts value
        end
    else
        puts "%s => %s" % [name,value]
    end
}

# $Id: facter,v 1.1.1.1 2004/03/21 21:06:27 luke Exp $