ohai 18.2.6 → 19.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +28 -28
- data/LICENSE +201 -201
- data/bin/ohai +25 -25
- data/lib/ohai/application.rb +189 -189
- data/lib/ohai/common/dmi.rb +167 -167
- data/lib/ohai/config.rb +51 -51
- data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
- data/lib/ohai/dsl/plugin.rb +232 -232
- data/lib/ohai/dsl.rb +22 -22
- data/lib/ohai/exception.rb +36 -36
- data/lib/ohai/hints.rb +68 -68
- data/lib/ohai/loader.rb +178 -178
- data/lib/ohai/log.rb +34 -34
- data/lib/ohai/mash.rb +22 -22
- data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
- data/lib/ohai/mixin/azure_metadata.rb +105 -105
- data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
- data/lib/ohai/mixin/command.rb +4 -4
- data/lib/ohai/mixin/constant_helper.rb +55 -55
- data/lib/ohai/mixin/dmi_decode.rb +54 -54
- data/lib/ohai/mixin/do_metadata.rb +48 -48
- data/lib/ohai/mixin/ec2_metadata.rb +264 -270
- data/lib/ohai/mixin/gce_metadata.rb +79 -79
- data/lib/ohai/mixin/http_helper.rb +64 -64
- data/lib/ohai/mixin/json_helper.rb +36 -36
- data/lib/ohai/mixin/network_helper.rb +92 -92
- data/lib/ohai/mixin/oci_metadata.rb +60 -60
- data/lib/ohai/mixin/os.rb +128 -128
- data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
- data/lib/ohai/mixin/seconds_to_human.rb +52 -52
- data/lib/ohai/mixin/shell_out.rb +51 -51
- data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
- data/lib/ohai/mixin/string.rb +31 -31
- data/lib/ohai/mixin/train_helpers.rb +36 -36
- data/lib/ohai/mixin/which.rb +39 -39
- data/lib/ohai/plugin_config.rb +47 -47
- data/lib/ohai/plugins/aix/kernel.rb +50 -50
- data/lib/ohai/plugins/aix/memory.rb +37 -37
- data/lib/ohai/plugins/aix/network.rb +142 -142
- data/lib/ohai/plugins/aix/platform.rb +30 -30
- data/lib/ohai/plugins/aix/uptime.rb +54 -54
- data/lib/ohai/plugins/aix/virtualization.rb +154 -154
- data/lib/ohai/plugins/alibaba.rb +72 -72
- data/lib/ohai/plugins/azure.rb +154 -154
- data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
- data/lib/ohai/plugins/c.rb +178 -178
- data/lib/ohai/plugins/chef.rb +50 -50
- data/lib/ohai/plugins/cloud.rb +379 -379
- data/lib/ohai/plugins/command.rb +26 -26
- data/lib/ohai/plugins/cpu.rb +642 -642
- data/lib/ohai/plugins/darwin/hardware.rb +99 -99
- data/lib/ohai/plugins/darwin/memory.rb +62 -62
- data/lib/ohai/plugins/darwin/network.rb +207 -207
- data/lib/ohai/plugins/darwin/platform.rb +40 -40
- data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
- data/lib/ohai/plugins/digital_ocean.rb +67 -67
- data/lib/ohai/plugins/dmi.rb +134 -134
- data/lib/ohai/plugins/docker.rb +58 -58
- data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
- data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
- data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
- data/lib/ohai/plugins/ec2.rb +148 -148
- data/lib/ohai/plugins/elixir.rb +36 -36
- data/lib/ohai/plugins/erlang.rb +60 -60
- data/lib/ohai/plugins/eucalyptus.rb +86 -86
- data/lib/ohai/plugins/filesystem.rb +753 -753
- data/lib/ohai/plugins/fips.rb +36 -36
- data/lib/ohai/plugins/freebsd/memory.rb +60 -60
- data/lib/ohai/plugins/freebsd/network.rb +128 -128
- data/lib/ohai/plugins/freebsd/platform.rb +28 -28
- data/lib/ohai/plugins/gce.rb +89 -89
- data/lib/ohai/plugins/go.rb +34 -34
- data/lib/ohai/plugins/groovy.rb +38 -38
- data/lib/ohai/plugins/grub2.rb +40 -40
- data/lib/ohai/plugins/habitat.rb +73 -73
- data/lib/ohai/plugins/haskell.rb +96 -96
- data/lib/ohai/plugins/hostname.rb +133 -133
- data/lib/ohai/plugins/init_package.rb +26 -26
- data/lib/ohai/plugins/java.rb +78 -78
- data/lib/ohai/plugins/kernel.rb +292 -292
- data/lib/ohai/plugins/keys.rb +27 -27
- data/lib/ohai/plugins/languages.rb +26 -26
- data/lib/ohai/plugins/libvirt.rb +114 -114
- data/lib/ohai/plugins/linode.rb +73 -73
- data/lib/ohai/plugins/linux/block_device.rb +48 -48
- data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
- data/lib/ohai/plugins/linux/interrupts.rb +84 -83
- data/lib/ohai/plugins/linux/ipc.rb +52 -52
- data/lib/ohai/plugins/linux/livepatch.rb +38 -38
- data/lib/ohai/plugins/linux/lsb.rb +46 -46
- data/lib/ohai/plugins/linux/lspci.rb +80 -80
- data/lib/ohai/plugins/linux/machineid.rb +36 -36
- data/lib/ohai/plugins/linux/mdadm.rb +120 -120
- data/lib/ohai/plugins/linux/memory.rb +106 -106
- data/lib/ohai/plugins/linux/network.rb +879 -879
- data/lib/ohai/plugins/linux/os_release.rb +38 -38
- data/lib/ohai/plugins/linux/platform.rb +314 -314
- data/lib/ohai/plugins/linux/selinux.rb +69 -69
- data/lib/ohai/plugins/linux/sessions.rb +54 -54
- data/lib/ohai/plugins/linux/sysctl.rb +39 -39
- data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
- data/lib/ohai/plugins/linux/tc.rb +61 -61
- data/lib/ohai/plugins/linux/virtualization.rb +300 -300
- data/lib/ohai/plugins/lua.rb +39 -39
- data/lib/ohai/plugins/mono.rb +50 -50
- data/lib/ohai/plugins/netbsd/memory.rb +99 -99
- data/lib/ohai/plugins/netbsd/network.rb +122 -122
- data/lib/ohai/plugins/netbsd/platform.rb +28 -28
- data/lib/ohai/plugins/network.rb +186 -186
- data/lib/ohai/plugins/nodejs.rb +40 -40
- data/lib/ohai/plugins/oci.rb +94 -94
- data/lib/ohai/plugins/ohai.rb +29 -29
- data/lib/ohai/plugins/ohai_time.rb +26 -26
- data/lib/ohai/plugins/openbsd/memory.rb +99 -99
- data/lib/ohai/plugins/openbsd/network.rb +122 -122
- data/lib/ohai/plugins/openbsd/platform.rb +28 -28
- data/lib/ohai/plugins/openstack.rb +84 -84
- data/lib/ohai/plugins/os.rb +55 -55
- data/lib/ohai/plugins/packages.rb +234 -234
- data/lib/ohai/plugins/passwd.rb +104 -104
- data/lib/ohai/plugins/perl.rb +45 -45
- data/lib/ohai/plugins/php.rb +52 -52
- data/lib/ohai/plugins/platform.rb +41 -41
- data/lib/ohai/plugins/powershell.rb +82 -82
- data/lib/ohai/plugins/ps.rb +35 -35
- data/lib/ohai/plugins/python.rb +43 -43
- data/lib/ohai/plugins/rackspace.rb +177 -177
- data/lib/ohai/plugins/root_group.rb +41 -41
- data/lib/ohai/plugins/rpm.rb +121 -121
- data/lib/ohai/plugins/ruby.rb +66 -66
- data/lib/ohai/plugins/rust.rb +34 -34
- data/lib/ohai/plugins/scala.rb +38 -38
- data/lib/ohai/plugins/scaleway.rb +58 -58
- data/lib/ohai/plugins/scsi.rb +52 -52
- data/lib/ohai/plugins/shard.rb +142 -142
- data/lib/ohai/plugins/shells.rb +32 -32
- data/lib/ohai/plugins/softlayer.rb +48 -48
- data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
- data/lib/ohai/plugins/solaris2/memory.rb +32 -32
- data/lib/ohai/plugins/solaris2/network.rb +192 -192
- data/lib/ohai/plugins/solaris2/platform.rb +58 -58
- data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
- data/lib/ohai/plugins/ssh_host_key.rb +84 -84
- data/lib/ohai/plugins/sysconf.rb +46 -46
- data/lib/ohai/plugins/timezone.rb +45 -45
- data/lib/ohai/plugins/train.rb +35 -35
- data/lib/ohai/plugins/uptime.rb +95 -95
- data/lib/ohai/plugins/virtualbox.rb +197 -197
- data/lib/ohai/plugins/vmware.rb +109 -109
- data/lib/ohai/plugins/windows/dmi.rb +95 -95
- data/lib/ohai/plugins/windows/drivers.rb +52 -52
- data/lib/ohai/plugins/windows/memory.rb +39 -39
- data/lib/ohai/plugins/windows/network.rb +222 -222
- data/lib/ohai/plugins/windows/platform.rb +34 -34
- data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
- data/lib/ohai/plugins/windows/virtualization.rb +45 -45
- data/lib/ohai/plugins/zpools.rb +94 -94
- data/lib/ohai/provides_map.rb +208 -208
- data/lib/ohai/runner.rb +128 -126
- data/lib/ohai/system.rb +258 -258
- data/lib/ohai/train_transport.rb +29 -29
- data/lib/ohai/util/file_helper.rb +6 -6
- data/lib/ohai/util/ip_helper.rb +56 -56
- data/lib/ohai/util/win32.rb +47 -47
- data/lib/ohai/version.rb +23 -23
- data/lib/ohai.rb +23 -23
- data/ohai.gemspec +35 -35
- metadata +9 -15
@@ -1,203 +1,203 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Serdar Sutay (<serdar@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
-
# implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
#
|
20
|
-
|
21
|
-
module Ohai
|
22
|
-
module DSL
|
23
|
-
class Plugin
|
24
|
-
# The class for the "Version 7" plugin format we introduced in Ohai 7. This is the 2nd
|
25
|
-
# generation of Ohai plugin and the previous generation (V6) was removed in Ohai 14
|
26
|
-
class VersionVII < Plugin
|
27
|
-
attr_reader :version
|
28
|
-
attr_reader :source
|
29
|
-
|
30
|
-
def initialize(data, logger)
|
31
|
-
super(data, logger)
|
32
|
-
@source = self.class.sources
|
33
|
-
@version = :version7
|
34
|
-
end
|
35
|
-
|
36
|
-
# the plugin name we use through Ohai (Foo) vs. the class name (Ohai::NamedPlugin::Foo)
|
37
|
-
#
|
38
|
-
# @return [String]
|
39
|
-
def name
|
40
|
-
self.class.name.split("Ohai::NamedPlugin::")[1].to_sym
|
41
|
-
end
|
42
|
-
|
43
|
-
# return that we're a v7 plugin
|
44
|
-
#
|
45
|
-
# @return [Symbol]
|
46
|
-
def self.version
|
47
|
-
:version7
|
48
|
-
end
|
49
|
-
|
50
|
-
# The source of the plugin on disk. This is an array since a plugin may exist for multiple
|
51
|
-
# oses and this would include each of those os specific file paths
|
52
|
-
#
|
53
|
-
# @return [Array]
|
54
|
-
def self.sources
|
55
|
-
@source_list ||= []
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.provides_attrs
|
59
|
-
@provides_attrs ||= []
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.depends_attrs
|
63
|
-
@depends_attrs ||= []
|
64
|
-
end
|
65
|
-
|
66
|
-
# A block per os for actually performing data collection constructed
|
67
|
-
# by the collect_data method
|
68
|
-
#
|
69
|
-
# @return [Mash]
|
70
|
-
def self.data_collector
|
71
|
-
@data_collector ||= Mash.new
|
72
|
-
end
|
73
|
-
|
74
|
-
# set the attributes provided by the plugin
|
75
|
-
#
|
76
|
-
# @param attrs [Array]
|
77
|
-
def self.provides(*attrs)
|
78
|
-
attrs.each do |attr|
|
79
|
-
provides_attrs << attr unless provides_attrs.include?(attr)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# set the attributes depended on by the plugin
|
84
|
-
#
|
85
|
-
# @param attrs [Array]
|
86
|
-
def self.depends(*attrs)
|
87
|
-
attrs.each do |attr|
|
88
|
-
depends_attrs << attr unless depends_attrs.include?(attr)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
# set the plugin optional state
|
93
|
-
#
|
94
|
-
# @param opt [Boolean]
|
95
|
-
def self.optional(opt = true)
|
96
|
-
@optional = opt
|
97
|
-
end
|
98
|
-
|
99
|
-
# check if the plugin is optional
|
100
|
-
#
|
101
|
-
# @return [Boolean]
|
102
|
-
def self.optional?
|
103
|
-
!!@optional
|
104
|
-
end
|
105
|
-
|
106
|
-
# define data collection methodology per os
|
107
|
-
#
|
108
|
-
# @param os [Array<Symbol>] the list of oses to collect data for
|
109
|
-
# @param block [block] the actual code to collect data for the specified os
|
110
|
-
#
|
111
|
-
def self.collect_data(*os_list, &block)
|
112
|
-
os_list = [ :default ] if os_list.empty?
|
113
|
-
os_list.flatten.each do |os|
|
114
|
-
Ohai::Log.warn("collect_data already defined on os '#{os}' for #{self}, last plugin seen will be used") if data_collector.key?(os)
|
115
|
-
data_collector[os] = block
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# @return [Array]
|
120
|
-
def dependencies
|
121
|
-
self.class.depends_attrs
|
122
|
-
end
|
123
|
-
|
124
|
-
def run_plugin
|
125
|
-
collector = self.class.data_collector
|
126
|
-
os = collect_os
|
127
|
-
|
128
|
-
# :default - means any remote or local unix or windows host
|
129
|
-
# :target - means any remote API which is not unix/windows or otherwise rubyable (cisco switches, IPMI console, HTTP API, etc)
|
130
|
-
#
|
131
|
-
# Do not be confused by the fact that collectors tagged :target do not run against e.g. target-mode ubuntu boxes, that is not
|
132
|
-
# what :target is intended for. Also, do not be confused by the fact that collectors tagged :default do not run by default against
|
133
|
-
# pure-target mode targets like switches. That is all intended behavior, the names are problematic. The :default nomenclature was
|
134
|
-
# invented 10 years before target mode and we are stuck with it.
|
135
|
-
#
|
136
|
-
if collector.key?(os)
|
137
|
-
instance_eval(&collector[os])
|
138
|
-
elsif collector.key?(:default) && !nonruby_target?
|
139
|
-
instance_eval(&collector[:default])
|
140
|
-
elsif collector.key?(:target) && nonruby_target?
|
141
|
-
instance_eval(&collector[:target])
|
142
|
-
else
|
143
|
-
logger.trace("Plugin #{name}: No data to collect. Skipping...")
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def optional?
|
148
|
-
self.class.optional?
|
149
|
-
end
|
150
|
-
|
151
|
-
def provides(*paths)
|
152
|
-
logger.warn("[UNSUPPORTED OPERATION] 'provides' is no longer supported in a 'collect_data' context. Please specify 'provides' before collecting plugin data. Ignoring command 'provides #{paths.join(", ")}")
|
153
|
-
end
|
154
|
-
|
155
|
-
def require_plugin(*args)
|
156
|
-
logger.warn("[UNSUPPORTED OPERATION] 'require_plugin' is no longer supported. Please use 'depends' instead.\nIgnoring plugin(s) #{args.join(", ")}")
|
157
|
-
end
|
158
|
-
|
159
|
-
def configuration(option, *options)
|
160
|
-
return nil if plugin_config.nil? || !plugin_config.key?(option)
|
161
|
-
|
162
|
-
value = plugin_config[option]
|
163
|
-
options.each do |opt|
|
164
|
-
return nil unless value.key?(opt)
|
165
|
-
|
166
|
-
value = value[opt]
|
167
|
-
end
|
168
|
-
value
|
169
|
-
end
|
170
|
-
|
171
|
-
private
|
172
|
-
|
173
|
-
def plugin_config
|
174
|
-
@plugin_config ||= fetch_plugin_config
|
175
|
-
end
|
176
|
-
|
177
|
-
def fetch_plugin_config
|
178
|
-
# DMI => ["DMI"]
|
179
|
-
# Memory => ["", "Memory"]
|
180
|
-
# NetworkListeners => ["", "Network", "", "Listeners"]
|
181
|
-
# SSHHostKey => ["SSH", "Host", "", "Key"]
|
182
|
-
parts = name.to_s.split(/([A-Z][a-z]+)/)
|
183
|
-
# ["DMI"] => ["DMI"]
|
184
|
-
# ["", "Memory"] => ["Memory"]
|
185
|
-
# ["", "Network", "", "Listeners"] => ["Network", "Listeners"]
|
186
|
-
# ["SSH", "Host", "", "Key"] => ["SSH", "Host", "Key"]
|
187
|
-
parts.delete_if(&:empty?)
|
188
|
-
# ["DMI"] => :dmi
|
189
|
-
# ["Memory"] => :memory
|
190
|
-
# ["Network", "Listeners"] => :network_listeners
|
191
|
-
# ["SSH", "Host", "Key"] => :ssh_host_key
|
192
|
-
snake_case_name = parts.map(&:downcase).join("_").to_sym
|
193
|
-
|
194
|
-
# Plugin names in config hashes are auto-vivified, so we check with
|
195
|
-
# key? to avoid falsely instantiating a configuration hash.
|
196
|
-
if Ohai.config[:plugin].key?(snake_case_name)
|
197
|
-
Ohai.config[:plugin][snake_case_name]
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Serdar Sutay (<serdar@chef.io>)
|
4
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
|
21
|
+
module Ohai
|
22
|
+
module DSL
|
23
|
+
class Plugin
|
24
|
+
# The class for the "Version 7" plugin format we introduced in Ohai 7. This is the 2nd
|
25
|
+
# generation of Ohai plugin and the previous generation (V6) was removed in Ohai 14
|
26
|
+
class VersionVII < Plugin
|
27
|
+
attr_reader :version
|
28
|
+
attr_reader :source
|
29
|
+
|
30
|
+
def initialize(data, logger)
|
31
|
+
super(data, logger)
|
32
|
+
@source = self.class.sources
|
33
|
+
@version = :version7
|
34
|
+
end
|
35
|
+
|
36
|
+
# the plugin name we use through Ohai (Foo) vs. the class name (Ohai::NamedPlugin::Foo)
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
def name
|
40
|
+
self.class.name.split("Ohai::NamedPlugin::")[1].to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
# return that we're a v7 plugin
|
44
|
+
#
|
45
|
+
# @return [Symbol]
|
46
|
+
def self.version
|
47
|
+
:version7
|
48
|
+
end
|
49
|
+
|
50
|
+
# The source of the plugin on disk. This is an array since a plugin may exist for multiple
|
51
|
+
# oses and this would include each of those os specific file paths
|
52
|
+
#
|
53
|
+
# @return [Array]
|
54
|
+
def self.sources
|
55
|
+
@source_list ||= []
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.provides_attrs
|
59
|
+
@provides_attrs ||= []
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.depends_attrs
|
63
|
+
@depends_attrs ||= []
|
64
|
+
end
|
65
|
+
|
66
|
+
# A block per os for actually performing data collection constructed
|
67
|
+
# by the collect_data method
|
68
|
+
#
|
69
|
+
# @return [Mash]
|
70
|
+
def self.data_collector
|
71
|
+
@data_collector ||= Mash.new
|
72
|
+
end
|
73
|
+
|
74
|
+
# set the attributes provided by the plugin
|
75
|
+
#
|
76
|
+
# @param attrs [Array]
|
77
|
+
def self.provides(*attrs)
|
78
|
+
attrs.each do |attr|
|
79
|
+
provides_attrs << attr unless provides_attrs.include?(attr)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# set the attributes depended on by the plugin
|
84
|
+
#
|
85
|
+
# @param attrs [Array]
|
86
|
+
def self.depends(*attrs)
|
87
|
+
attrs.each do |attr|
|
88
|
+
depends_attrs << attr unless depends_attrs.include?(attr)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# set the plugin optional state
|
93
|
+
#
|
94
|
+
# @param opt [Boolean]
|
95
|
+
def self.optional(opt = true)
|
96
|
+
@optional = opt
|
97
|
+
end
|
98
|
+
|
99
|
+
# check if the plugin is optional
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
def self.optional?
|
103
|
+
!!@optional
|
104
|
+
end
|
105
|
+
|
106
|
+
# define data collection methodology per os
|
107
|
+
#
|
108
|
+
# @param os [Array<Symbol>] the list of oses to collect data for
|
109
|
+
# @param block [block] the actual code to collect data for the specified os
|
110
|
+
#
|
111
|
+
def self.collect_data(*os_list, &block)
|
112
|
+
os_list = [ :default ] if os_list.empty?
|
113
|
+
os_list.flatten.each do |os|
|
114
|
+
Ohai::Log.warn("collect_data already defined on os '#{os}' for #{self}, last plugin seen will be used") if data_collector.key?(os)
|
115
|
+
data_collector[os] = block
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [Array]
|
120
|
+
def dependencies
|
121
|
+
self.class.depends_attrs
|
122
|
+
end
|
123
|
+
|
124
|
+
def run_plugin
|
125
|
+
collector = self.class.data_collector
|
126
|
+
os = collect_os
|
127
|
+
|
128
|
+
# :default - means any remote or local unix or windows host
|
129
|
+
# :target - means any remote API which is not unix/windows or otherwise rubyable (cisco switches, IPMI console, HTTP API, etc)
|
130
|
+
#
|
131
|
+
# Do not be confused by the fact that collectors tagged :target do not run against e.g. target-mode ubuntu boxes, that is not
|
132
|
+
# what :target is intended for. Also, do not be confused by the fact that collectors tagged :default do not run by default against
|
133
|
+
# pure-target mode targets like switches. That is all intended behavior, the names are problematic. The :default nomenclature was
|
134
|
+
# invented 10 years before target mode and we are stuck with it.
|
135
|
+
#
|
136
|
+
if collector.key?(os)
|
137
|
+
instance_eval(&collector[os])
|
138
|
+
elsif collector.key?(:default) && !nonruby_target?
|
139
|
+
instance_eval(&collector[:default])
|
140
|
+
elsif collector.key?(:target) && nonruby_target?
|
141
|
+
instance_eval(&collector[:target])
|
142
|
+
else
|
143
|
+
logger.trace("Plugin #{name}: No data to collect. Skipping...")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def optional?
|
148
|
+
self.class.optional?
|
149
|
+
end
|
150
|
+
|
151
|
+
def provides(*paths)
|
152
|
+
logger.warn("[UNSUPPORTED OPERATION] \'provides\' is no longer supported in a \'collect_data\' context. Please specify \'provides\' before collecting plugin data. Ignoring command \'provides #{paths.join(", ")}")
|
153
|
+
end
|
154
|
+
|
155
|
+
def require_plugin(*args)
|
156
|
+
logger.warn("[UNSUPPORTED OPERATION] \'require_plugin\' is no longer supported. Please use \'depends\' instead.\nIgnoring plugin(s) #{args.join(", ")}")
|
157
|
+
end
|
158
|
+
|
159
|
+
def configuration(option, *options)
|
160
|
+
return nil if plugin_config.nil? || !plugin_config.key?(option)
|
161
|
+
|
162
|
+
value = plugin_config[option]
|
163
|
+
options.each do |opt|
|
164
|
+
return nil unless value.key?(opt)
|
165
|
+
|
166
|
+
value = value[opt]
|
167
|
+
end
|
168
|
+
value
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def plugin_config
|
174
|
+
@plugin_config ||= fetch_plugin_config
|
175
|
+
end
|
176
|
+
|
177
|
+
def fetch_plugin_config
|
178
|
+
# DMI => ["DMI"]
|
179
|
+
# Memory => ["", "Memory"]
|
180
|
+
# NetworkListeners => ["", "Network", "", "Listeners"]
|
181
|
+
# SSHHostKey => ["SSH", "Host", "", "Key"]
|
182
|
+
parts = name.to_s.split(/([A-Z][a-z]+)/)
|
183
|
+
# ["DMI"] => ["DMI"]
|
184
|
+
# ["", "Memory"] => ["Memory"]
|
185
|
+
# ["", "Network", "", "Listeners"] => ["Network", "Listeners"]
|
186
|
+
# ["SSH", "Host", "", "Key"] => ["SSH", "Host", "Key"]
|
187
|
+
parts.delete_if(&:empty?)
|
188
|
+
# ["DMI"] => :dmi
|
189
|
+
# ["Memory"] => :memory
|
190
|
+
# ["Network", "Listeners"] => :network_listeners
|
191
|
+
# ["SSH", "Host", "Key"] => :ssh_host_key
|
192
|
+
snake_case_name = parts.map(&:downcase).join("_").to_sym
|
193
|
+
|
194
|
+
# Plugin names in config hashes are auto-vivified, so we check with
|
195
|
+
# key? to avoid falsely instantiating a configuration hash.
|
196
|
+
if Ohai.config[:plugin].key?(snake_case_name)
|
197
|
+
Ohai.config[:plugin][snake_case_name]
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|