ohai 13.5.0 → 13.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e65f269d28a4e10d57a696348f63e3ab208e6d55
4
- data.tar.gz: 75ed053be1baa6c94abe967f350d8e5469f68a91
3
+ metadata.gz: f877e6723a132a880743b84ab9a9d6a0ede623eb
4
+ data.tar.gz: 7bb2833e7c7d12bc8207608bf14f93b266e48371
5
5
  SHA512:
6
- metadata.gz: 6240f2a183fef7382c07416c887595d6855ff5210c453acbde845b3fb240f8efdbf3a8c41c8e51c39b887a744a34d9d7fe6b8511a9a45697e29fbf60da8957ca
7
- data.tar.gz: 56e191347c743a0070b0f82e9f4f99928e954c9376d1778ddfbc4952271972645782fd6ee1b09e0f075e6e1c4233c18450a24e02979923a899e86af6cc182ab5
6
+ metadata.gz: b7b5ff8c56d7f071ac3278e345c91bd8df4f9a5e4e07fd4aec0a714833f1debaabc02a588d6ca2b5c43595d8799662410d6ec95cca4b9fb84a641358ccfb4c06
7
+ data.tar.gz: d062c3f9b9595a699be681be9d3b1a8bb6513e61fefc7662fbc3e88f0f5063dbe2b640997e4957e0ff4667b79023e4016e114ba68c34d288b6c2e27479b22e40
@@ -35,6 +35,7 @@ module Ohai
35
35
  default :log_location, STDERR
36
36
  default :plugin, Ohai::PluginConfig.new { |h, k| h[k] = Ohai::PluginConfig.new }
37
37
  default :plugin_path, [ File.expand_path(File.join(File.dirname(__FILE__), "plugins")), ChefConfig::Config.platform_specific_path("/etc/chef/ohai/plugins") ]
38
+ default :critical_plugins, []
38
39
  end
39
40
  end
40
41
 
@@ -85,10 +85,12 @@ module Ohai
85
85
  include Ohai::Util::FileHelper
86
86
 
87
87
  attr_reader :data
88
+ attr_reader :failed
88
89
 
89
90
  def initialize(data)
90
91
  @data = data
91
92
  @has_run = false
93
+ @failed = false
92
94
  end
93
95
 
94
96
  def run
@@ -182,8 +184,10 @@ module Ohai
182
184
  def safe_run
183
185
  run
184
186
  rescue Ohai::Exceptions::Error => e
187
+ @failed = true
185
188
  raise e
186
189
  rescue => e
190
+ @failed = true
187
191
  Ohai::Log.debug("Plugin #{name} threw #{e.inspect}")
188
192
  e.backtrace.each { |line| Ohai::Log.debug( line ) }
189
193
  end
@@ -29,5 +29,6 @@ module Ohai
29
29
  class DependencyNotFound < Error; end
30
30
  class AttributeSyntaxError < Error; end
31
31
  class PluginConfigError < Error; end
32
+ class CriticalPluginFailure < Error; end
32
33
  end
33
34
  end
@@ -46,7 +46,8 @@ Ohai.plugin(:Uptime) do
46
46
  end
47
47
  elapsed_seconds = ((d.to_i * 86400) + (h.to_i * 3600) + (m.to_i * 60) + s.to_i)
48
48
 
49
- uptime_seconds Time.now.to_i - elapsed_seconds
49
+ # uptime seconds below will return the elapsed time since boot
50
+ uptime_seconds elapsed_seconds
50
51
  uptime seconds_to_human(elapsed_seconds)
51
52
  end
52
53
  end
@@ -130,7 +130,10 @@ Ohai.plugin(:Filesystem) do
130
130
  fs[key][:mount] = $6
131
131
  end
132
132
  end
133
- rescue Ohai::Exceptions::Exec
133
+ rescue Ohai::Exceptions::Exec => e
134
+ unless Ohai.config[:plugin][:filesystem][:allow_partial_data]
135
+ raise e
136
+ end
134
137
  Ohai::Log.warn("Plugin Filesystem: df binary is not available. Some data will not be available.")
135
138
  end
136
139
 
@@ -148,6 +151,9 @@ Ohai.plugin(:Filesystem) do
148
151
  end
149
152
  end
150
153
  rescue Ohai::Exceptions::Exec
154
+ unless Ohai.config[:plugin][:filesystem][:allow_partial_data]
155
+ raise e
156
+ end
151
157
  Ohai::Log.warn("Plugin Filesystem: mount binary is not available. Some data will not be available.")
152
158
  end
153
159
 
@@ -22,7 +22,7 @@ Ohai.plugin(:Virtualization) do
22
22
  provides "virtualization"
23
23
 
24
24
  def lxc_version_exists?
25
- which("lxc-version")
25
+ which("lxc-version") || which("lxc-start")
26
26
  end
27
27
 
28
28
  def nova_exists?
@@ -43,7 +43,7 @@ Ohai.plugin(:Packages) do
43
43
  packages[name] = { "version" => version, "arch" => arch }
44
44
  end
45
45
 
46
- when "rhel", "fedora", "suse", "pld"
46
+ when "rhel", "fedora", "suse", "pld", "amazon"
47
47
  format = '%{NAME}\t%|EPOCH?{%{EPOCH}}:{0}|\t%{VERSION}\t%{RELEASE}\t%{INSTALLTIME}\t%{ARCH}\n'
48
48
  so = shell_out("rpm -qa --qf '#{format}'")
49
49
  pkgs = so.stdout.lines
@@ -43,13 +43,27 @@ Ohai.plugin(:Rackspace) do
43
43
  false
44
44
  end
45
45
 
46
+ # Checks for the rackspace manufacturer on Windows
47
+ # === Return
48
+ # true:: If the rackspace cloud can be identified
49
+ # false:: Otherwise
50
+ def has_rackspace_manufacturer?
51
+ return false unless RUBY_PLATFORM =~ /mswin|mingw32|windows/
52
+ require "wmi-lite/wmi"
53
+ wmi = WmiLite::Wmi.new
54
+ if wmi.first_of("Win32_ComputerSystem")["PrimaryOwnerName"] == "Rackspace"
55
+ Ohai::Log.debug("Plugin Rackspace: has_rackspace_manufacturer? == true")
56
+ return true
57
+ end
58
+ end
59
+
46
60
  # Identifies the rackspace cloud
47
61
  #
48
62
  # === Return
49
63
  # true:: If the rackspace cloud can be identified
50
64
  # false:: Otherwise
51
65
  def looks_like_rackspace?
52
- hint?("rackspace") || has_rackspace_metadata? || has_rackspace_kernel?
66
+ hint?("rackspace") || has_rackspace_metadata? || has_rackspace_kernel? || has_rackspace_manufacturer?
53
67
  end
54
68
 
55
69
  # Names rackspace ip address
@@ -137,8 +151,8 @@ Ohai.plugin(:Rackspace) do
137
151
  rackspace Mash.new
138
152
  get_ip_address(:public_ip, :eth0)
139
153
  get_ip_address(:private_ip, :eth1)
140
- get_region()
141
- get_instance_id()
154
+ get_region
155
+ get_instance_id
142
156
  # public_ip + private_ip are deprecated in favor of public_ipv4 and local_ipv4 to standardize.
143
157
  rackspace[:public_ipv4] = rackspace[:public_ip]
144
158
  get_global_ipv6_address(:public_ipv6, :eth0)
@@ -23,11 +23,13 @@ require "benchmark"
23
23
  module Ohai
24
24
  class Runner
25
25
 
26
+ attr_reader :failed_plugins
26
27
  # safe_run: set to true if this runner will run plugins in
27
28
  # safe-mode. default false.
28
29
  def initialize(controller, safe_run = false)
29
30
  @provides_map = controller.provides_map
30
31
  @safe_run = safe_run
32
+ @failed_plugins = []
31
33
  end
32
34
 
33
35
  # Runs plugins and any un-run dependencies.
@@ -86,6 +88,9 @@ module Ohai
86
88
 
87
89
  if dependency_providers.empty?
88
90
  @safe_run ? next_plugin.safe_run : next_plugin.run
91
+ if next_plugin.failed
92
+ @failed_plugins << next_plugin.name
93
+ end
89
94
  else
90
95
  visited << next_plugin << dependency_providers.first
91
96
  end
@@ -47,6 +47,7 @@ module Ohai
47
47
  @cli = config[:invoked_from_cli]
48
48
  @plugin_path = ""
49
49
  @config = config
50
+ @failed_plugins = []
50
51
  reset_system
51
52
  end
52
53
 
@@ -107,6 +108,16 @@ module Ohai
107
108
  Ohai::Log.error("Encountered error while running plugins: #{e.inspect}")
108
109
  raise
109
110
  end
111
+ critical_failed = Ohai::Config.ohai[:critical_plugins] & @runner.failed_plugins
112
+ unless critical_failed.empty?
113
+ msg = "The following Ohai plugins marked as critical failed: #{critical_failed}"
114
+ if @cli
115
+ Ohai::Log.error(msg)
116
+ exit(true)
117
+ else
118
+ raise Ohai::Exceptions::CriticalPluginFailure, "#{msg}. Failing Chef run."
119
+ end
120
+ end
110
121
 
111
122
  # Freeze all strings.
112
123
  freeze_strings!
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = "13.5.0"
21
+ VERSION = "13.6.0"
22
22
  end
@@ -24,13 +24,12 @@ describe Ohai::System, "Aix plugin uptime" do
24
24
  @plugin = get_plugin("aix/uptime")
25
25
  allow(@plugin).to receive(:collect_os).and_return(:aix)
26
26
  allow(@plugin).to receive(:shell_out).and_call_original
27
- allow(Time).to receive_message_chain(:now, :to_i).and_return(1504287957)
28
27
  allow(@plugin).to receive(:shell_out).with("LC_ALL=POSIX ps -o etime= -p 1").and_return(mock_shell_out(0, "1148-20:54:50", nil))
29
28
  @plugin.run
30
29
  end
31
30
 
32
31
  it "should set uptime_seconds to uptime with days" do
33
- expect(@plugin[:uptime_seconds]).to eq(1405025467)
32
+ expect(@plugin[:uptime_seconds]).to eq(99262490)
34
33
  end
35
34
 
36
35
  it "should set uptime to a human readable date with days" do
@@ -533,8 +533,17 @@ BLKID_TYPE
533
533
  end
534
534
 
535
535
  %w{df mount}.each do |command|
536
- describe "when #{command} does not exist" do
536
+ describe "when :allow_partial_data set, #{command} does not exist" do
537
+ before do
538
+ Ohai.config[:plugin][:filesystem][:allow_partial_data] = true
539
+ end
540
+
541
+ after do
542
+ Ohai.config[:plugin][:filesystem][:allow_partial_data] = false
543
+ end
544
+
537
545
  it "logs warning about #{command} missing" do
546
+ Ohai.config[:plugin][:filesystem][:allow_partial_data] = true
538
547
  allow(plugin).to receive(:shell_out).with(/#{command}/).and_raise(Ohai::Exceptions::Exec)
539
548
  expect(Ohai::Log).to receive(:warn).with("Plugin Filesystem: #{command} binary is not available. Some data will not be available.")
540
549
  plugin.run
@@ -42,7 +42,8 @@ describe Ohai::System, "Linux virtualization platform" do
42
42
  allow(File).to receive(:exist?).with("/var/lib/lxd/devlxd").and_return(false)
43
43
 
44
44
  # default the which wrappers to nil
45
- allow(plugin).to receive(:lxc_version_exists?).and_return(false)
45
+ allow(plugin).to receive(:which).with("lxc-version").and_return(nil)
46
+ allow(plugin).to receive(:which).with("lxc-start").and_return(nil)
46
47
  allow(plugin).to receive(:nova_exists?).and_return(false)
47
48
  end
48
49
 
@@ -577,7 +578,15 @@ CGROUP
577
578
  end
578
579
 
579
580
  it "sets lxc host if lxc-version exists" do
580
- allow(plugin).to receive(:lxc_version_exists?).and_return("/usr/bin/lxc-version")
581
+ allow(plugin).to receive(:which).with("lxc-start").and_return("/usr/bin/lxc-version")
582
+ plugin.run
583
+ expect(plugin[:virtualization][:system]).to eq("lxc")
584
+ expect(plugin[:virtualization][:role]).to eq("host")
585
+ expect(plugin[:virtualization][:systems][:lxc]).to eq("host")
586
+ end
587
+
588
+ it "sets lxc host if lxc-start exists" do
589
+ allow(plugin).to receive(:which).with("lxc-start").and_return("/usr/bin/lxc-start")
581
590
  plugin.run
582
591
  expect(plugin[:virtualization][:system]).to eq("lxc")
583
592
  expect(plugin[:virtualization][:role]).to eq("host")
@@ -585,7 +594,7 @@ CGROUP
585
594
  end
586
595
 
587
596
  it "does not set the old virtualization attributes if they are already set" do
588
- allow(plugin).to receive(:lxc_version_exists?).and_return("/usr/bin/lxc-version")
597
+ allow(plugin).to receive(:which).with("lxc-version").and_return("/usr/bin/lxc-version")
589
598
  plugin[:virtualization] = Mash.new
590
599
  plugin[:virtualization][:system] = "the cloud"
591
600
  plugin[:virtualization][:role] = "cumulonimbus"
@@ -594,8 +603,7 @@ CGROUP
594
603
  expect(plugin[:virtualization][:role]).not_to eq("host")
595
604
  end
596
605
 
597
- it "does not set lxc host if lxc-version does not exist" do
598
- allow(plugin).to receive(:lxc_version_exists?).and_return(false)
606
+ it "does not set lxc host if neither lxc-version nor lxc-start exists" do
599
607
  plugin.run
600
608
  expect(plugin[:virtualization][:system]).to be_nil
601
609
  expect(plugin[:virtualization][:role]).to be_nil
@@ -223,6 +223,18 @@ OUT
223
223
  end
224
224
  end
225
225
 
226
+ describe "with Rackspace windows manufacturer data" do
227
+ it "has rackspace attribute" do
228
+ plugin.run
229
+ expect(plugin[:rackspace]).not_to be_nil
230
+ end
231
+
232
+ before(:each) do
233
+ allow(plugin).to receive(:hint?).with("rackspace").and_return(false)
234
+ allow(plugin).to receive(:has_rackspace_manufacturer?).and_return(true)
235
+ end
236
+ end
237
+
226
238
  describe "xenstore provider returns rackspace" do
227
239
  it_behaves_like "rackspace"
228
240
 
@@ -43,6 +43,7 @@ describe "Ohai::System" do
43
43
  config = {
44
44
  disabled_plugins: [ :Foo, :Baz ],
45
45
  directory: "/some/extra/plugins",
46
+ critical_plugins: [ :Foo, :Bar ],
46
47
  }
47
48
  Ohai::System.new(config)
48
49
  config.each do |option, value|
@@ -307,6 +308,15 @@ Ohai.plugin(:Park) do
307
308
  park("plants")
308
309
  end
309
310
  end
311
+ EOF
312
+
313
+ with_plugin("fails.rb", <<EOF)
314
+ Ohai.plugin(:Fails) do
315
+ provides 'fails'
316
+ collect_data(:default) do
317
+ fail 'thing'
318
+ end
319
+ end
310
320
  EOF
311
321
 
312
322
  it "should collect data from all the plugins" do
@@ -343,6 +353,22 @@ EOF
343
353
  expect(ohai.data[:park]).to eq("plants")
344
354
  end
345
355
  end
356
+
357
+ describe "when using :critical_plugins" do
358
+ before do
359
+ Ohai.config[:critical_plugins] = [ :Fails ]
360
+ end
361
+ after do
362
+ Ohai.config[:critical_plugins] = []
363
+ end
364
+
365
+ it "should fail when critical plugins fail" do
366
+ Ohai.config[:plugin_path] = [ path_to(".") ]
367
+ expect(Ohai::Log).to receive(:error).with(/marked as critical/)
368
+ ohai.all_plugins
369
+ end
370
+
371
+ end
346
372
  end
347
373
 
348
374
  when_plugins_directory "contains v6 & v7 plugins in different directories" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ohai
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.5.0
4
+ version: 13.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-28 00:00:00.000000000 Z
11
+ date: 2017-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu