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
127
128
129
|
#
# Author:: Mathieu Sauve-Frankel <msf@kisoku.net>
# Copyright:: Copyright (c) 2009 Mathieu Sauve-Frankel.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require "chef-config/path_helper"
require "chef-config/workstation_config_loader"
require "ohai"
require "ohai/log"
require "mixlib/cli"
class Ohai::Application
include Mixlib::CLI
option :config_file,
:short => "-c CONFIG",
:long => "--config CONFIG",
:description => "A configuration file to use",
:proc => lambda { |path| File.expand_path(path, Dir.pwd) }
option :directory,
:short => "-d DIRECTORY",
:long => "--directory DIRECTORY",
:description => "A directory to add to the Ohai plugin search path",
:proc => lambda { |path| Ohai::Config.platform_specific_path(path) }
option :log_level,
:short => "-l LEVEL",
:long => "--log_level LEVEL",
:description => "Set the log level (debug, info, warn, error, fatal)",
:proc => lambda { |l| l.to_sym }
option :log_location,
:short => "-L LOGLOCATION",
:long => "--logfile LOGLOCATION",
:description => "Set the log file location, defaults to STDOUT - recommended for daemonizing",
:proc => nil
option :help,
:short => "-h",
:long => "--help",
:description => "Show this message",
:on => :tail,
:boolean => true,
:show_options => true,
:exit => 0
option :version,
:short => "-v",
:long => "--version",
:description => "Show Ohai version",
:boolean => true,
:proc => lambda { |v| puts "Ohai: #{::Ohai::VERSION}" },
:exit => 0
def initialize
super
# Always switch to a readable directory. Keeps subsequent Dir.chdir() {}
# from failing due to permissions when launched as a less privileged user.
Dir.chdir("/")
end
def run
configure_ohai
run_application
end
def configure_ohai
@attributes = parse_options
@attributes = nil if @attributes.empty?
load_workstation_config
Ohai::Log.init(Ohai.config[:log_location])
end
def run_application
ohai = Ohai::System.new(config)
ohai.all_plugins(@attributes)
if @attributes
@attributes.each do |a|
puts ohai.attributes_print(a)
end
else
puts ohai.json_pretty_print
end
end
class << self
# Log a fatal error message to both STDERR and the Logger, exit the application
def fatal!(msg, err = -1)
STDERR.puts("FATAL: #{msg}")
Ohai::Log.fatal(msg)
Process.exit err
end
def exit!(msg, err = -1)
Ohai::Log.debug(msg)
Process.exit err
end
end
private
def load_workstation_config
config_loader = ChefConfig::WorkstationConfigLoader.new(
config[:config_file], Ohai::Log
)
begin
config_loader.load
rescue ChefConfig::ConfigurationError => config_error
Ohai::Application.fatal!(config_error.message)
end
end
end
|