ohai 8.14.0 → 8.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 880a68c3c0a321e516f4ebd6fe4d8ea96dc4bd81
4
- data.tar.gz: e6f7e6019d46c47e58cc642ba8104624bd5cfdd3
3
+ metadata.gz: 7df39abb86c4a5e8f6936d8f0707ae4ff7de75ed
4
+ data.tar.gz: 16f9c140d9b23470add7d01886bfd6221b58300f
5
5
  SHA512:
6
- metadata.gz: 79c39d1fc907eda3130f429f3ca5f0b7511e5448e83188ef6d59148b36d8e661bcc550a8e61eb194259c32fe42e015e5ef49236cde4636af68f1ad6d744326c1
7
- data.tar.gz: 967a82e37972b3d947c81612d983e52124479c419d4a1161a9bf8e825d61b40fbeea720ff9658981daa2a228d87d04eec2048dc44ec64752c4b763dba795abd1
6
+ metadata.gz: 4f2e803ef3895622aafedf24da387c4b95afebd0bd09b7442eee279ad2b6a974145c1c3cbc1ff8eee8465a37366afdbfad5e85cb88048271c4b03004fd7598ca
7
+ data.tar.gz: 12ae394e37c107d5cc10a162928aabc9dba06685d578b7cd188141a8ad91f2dbb66deb966501965880eec9d10e7bc49e7239bf6ecf64d88aa7fba21ba6fc263d
data/bin/ohai CHANGED
File without changes
@@ -22,28 +22,30 @@ require "ffi_yajl"
22
22
  module Ohai
23
23
  module Hints
24
24
  def self.refresh_hints
25
- @hints = Hash.new
25
+ @hints = {}
26
+ end
27
+
28
+ def self.parse_hint_file(filename)
29
+ json_parser = FFI_Yajl::Parser.new
30
+ hash = json_parser.parse(File.read(filename))
31
+ hash || {} # hint
32
+ # should exist because the file did, even if it didn't
33
+ # contain anything
34
+ rescue FFI_Yajl::ParseError => e
35
+ Ohai::Log.error("Could not parse hint file at #{filename}: #{e.message}")
26
36
  end
27
37
 
28
38
  def self.hint?(name)
29
- @hints ||= Hash.new
39
+ @hints ||= {}
30
40
  return @hints[name] if @hints[name]
31
-
32
41
  Ohai.config[:hints_path].each do |path|
33
42
  filename = File.join(path, "#{name}.json")
34
- if File.exist?(filename)
35
- begin
36
- json_parser = FFI_Yajl::Parser.new
37
- hash = json_parser.parse(File.read(filename))
38
- @hints[name] = hash || Hash.new # hint
39
- # should exist because the file did, even if it didn't
40
- # contain anything
41
- rescue FFI_Yajl::ParseError => e
42
- Ohai::Log.error("Could not parse hint file at #{filename}: #{e.message}")
43
- end
44
- end
43
+ next unless File.exist?(filename)
44
+ Ohai::Log.debug("Found hint #{name}.json at #{filename}")
45
+ @hints[name] = parse_hint_file(filename)
45
46
  end
46
47
 
48
+ Ohai::Log.debug("Did not find hint #{name}.json in the hint path(s): #{Ohai.config[:hints_path].join(', ')} ") unless @hints.key?(name)
47
49
  @hints[name]
48
50
  end
49
51
  end
@@ -53,7 +53,7 @@ Ohai.plugin(:C) do
53
53
  c[:glibc][:version] = $1
54
54
  c[:glibc][:description] = description
55
55
  end
56
- end unless c[:glibc]
56
+ end unless c[:glibc] || ::RbConfig::CONFIG["host_os"] =~ /mswin|mingw32|windows/
57
57
  end
58
58
 
59
59
  #ms cl
@@ -15,18 +15,24 @@
15
15
 
16
16
  Ohai.plugin(:Elixir) do
17
17
  provides "languages/elixir"
18
-
19
18
  depends "languages"
20
19
 
21
20
  collect_data do
22
- output = nil
23
-
24
- elixir = Mash.new
25
- so = shell_out("elixir -v")
26
- if so.exitstatus == 0
27
- output = so.stdout.split
28
- elixir[:version] = output[1]
29
- languages[:elixir] = elixir if elixir[:version]
21
+ begin
22
+ so = shell_out("elixir -v")
23
+ # Sample output:
24
+ # Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
25
+ #
26
+ # Elixir 1.2.4
27
+ if so.exitstatus == 0
28
+ elixir = Mash.new
29
+ if so.stdout =~ /^Elixir (\S*)/
30
+ elixir[:version] = $1
31
+ languages[:elixir] = elixir
32
+ end
33
+ end
34
+ rescue Ohai::Exceptions::Exec
35
+ Ohai::Log.debug('Elixir plugin: Could not shell_out "elixir -v". Skipping plugin')
30
36
  end
31
37
  end
32
38
  end
@@ -18,26 +18,44 @@
18
18
 
19
19
  Ohai.plugin(:Erlang) do
20
20
  provides "languages/erlang"
21
-
22
21
  depends "languages"
23
22
 
24
23
  collect_data do
25
- output = nil
26
-
27
24
  erlang = Mash.new
28
- so = shell_out("erl +V")
29
- if so.exitstatus == 0
30
- output = so.stderr.split
31
- if output.length >= 6
32
- options = output[1]
33
- options.gsub!(/(\(|\))/, "")
34
- erlang[:version] = output[5]
35
- erlang[:options] = options.split(",")
36
- erlang[:emulator] = output[2].gsub!(/(\(|\))/, "")
37
- if erlang[:version] && erlang[:options] && erlang[:emulator]
38
- languages[:erlang] = erlang
25
+
26
+ begin
27
+ so = shell_out("erl -eval 'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().' -noshell")
28
+ # Sample output:
29
+ # "18"
30
+ # "7.3"
31
+ # "2.10"
32
+ if so.exitstatus == 0
33
+ output = so.stdout.split(/\r\n/).map! { |x| x.delete('\\"') }
34
+ erlang[:version] = output[0]
35
+ erlang[:erts_version] = output[1]
36
+ erlang[:nif_version] = output[2]
37
+ end
38
+ rescue Ohai::Exceptions::Exec
39
+ Ohai::Log.debug('Erlang plugin: Could not shell_out "erl -eval \'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().\' -noshell". Skipping data')
40
+ end
41
+
42
+ begin
43
+ so = shell_out("erl +V")
44
+ # Sample output:
45
+ # Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.3
46
+ if so.exitstatus == 0
47
+ output = so.stderr.split
48
+ if output.length >= 6
49
+ options = output[1]
50
+ options.gsub!(/(\(|\))/, "")
51
+ erlang[:options] = options.split(",")
52
+ erlang[:emulator] = output[2].gsub!(/(\(|\))/, "")
39
53
  end
40
54
  end
55
+ rescue Ohai::Exceptions::Exec
56
+ Ohai::Log.debug('Erlang plugin: Could not shell_out "erl +V". Skipping data')
41
57
  end
58
+
59
+ languages[:erlang] = erlang unless erlang.empty?
42
60
  end
43
61
  end
@@ -0,0 +1,38 @@
1
+ #
2
+ # Author:: Matt Wrock (<matt@mattwrock.com>)
3
+ # Copyright:: Copyright (c) 2016 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ # After long discussion in IRC the "powers that be" have come to a concensus
20
+ # that there is no other Windows platforms exist that were not based on the
21
+ # Windows_NT kernel, so we herby decree that "windows" will refer to all
22
+ # platforms built upon the Windows_NT kernel and have access to win32 or win64
23
+ # subsystems.
24
+
25
+ Ohai.plugin(:Fips) do
26
+ provides "fips"
27
+
28
+ collect_data(:linux) do
29
+ fips Mash.new
30
+
31
+ begin
32
+ enabled = File.read("/proc/sys/crypto/fips_enabled").chomp
33
+ fips["kernel"] = { "enabled" => enabled == "0" ? false : true }
34
+ rescue Errno::ENOENT
35
+ fips["kernel"] = { "enabled" => false }
36
+ end
37
+ end
38
+ end
@@ -18,24 +18,33 @@
18
18
 
19
19
  Ohai.plugin(:Mono) do
20
20
  provides "languages/mono"
21
-
22
21
  depends "languages"
23
22
 
24
23
  collect_data do
25
- output = nil
26
-
27
- mono = Mash.new
28
24
 
29
- so = shell_out("mono -V")
30
- if so.exitstatus == 0
31
- output = so.stdout.split
32
- if output.length >= 4
33
- mono[:version] = output[4]
34
- end
35
- if output.length >= 11
36
- mono[:builddate] = "%s %s %s %s" % [output[6], output[7], output[8], output[11].delete!(")")]
25
+ begin
26
+ # Mono JIT compiler version 4.2.3 (Stable 4.2.3.4/832de4b Wed Mar 30 13:57:48 PDT 2016)
27
+ # Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
28
+ # TLS: normal
29
+ # SIGSEGV: altstack
30
+ # Notification: kqueue
31
+ # Architecture: amd64
32
+ # Disabled: none
33
+ # Misc: softdebug
34
+ # LLVM: supported, not enabled.
35
+ # GC: sgen
36
+ so = shell_out("mono -V")
37
+ if so.exitstatus == 0
38
+ mono = Mash.new
39
+ output = so.stdout.split
40
+ mono[:version] = output[4] unless output[4].nil?
41
+ if output.length >= 12
42
+ mono[:builddate] = "%s %s %s %s %s %s" % [output[7], output[8], output[9], output[10], output[11], output[12].delete!(")")]
43
+ end
44
+ languages[:mono] = mono unless mono.empty?
37
45
  end
38
- languages[:mono] = mono if mono[:version]
46
+ rescue Ohai::Exceptions::Exec
47
+ Ohai::Log.debug('Mono plugin: Could not shell_out "mono -V". Skipping plugin')
39
48
  end
40
49
  end
41
50
  end
@@ -20,24 +20,31 @@ Ohai.plugin(:Scala) do
20
20
  depends "languages"
21
21
 
22
22
  collect_data(:default) do
23
- # Check for scala
24
- output = nil
25
-
26
23
  scala = Mash.new
27
- so = shell_out("scala -version")
28
- if so.exitstatus == 0
29
- output = so.stdout.split
30
- scala[:version] = output[4]
31
- languages[:scala] = scala if scala[:version]
24
+
25
+ # Check for scala
26
+ begin
27
+ # Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
28
+ so = shell_out("scala -version")
29
+ if so.exitstatus == 0
30
+ scala[:version] = so.stderr.split[4]
31
+ end
32
+ rescue Ohai::Exceptions::Exec
33
+ # ignore shell_out failures
32
34
  end
33
35
 
34
36
  # Check for sbt
35
- output = nil
36
-
37
- so = shell_out("sbt --version")
38
- if so.exitstatus == 0
39
- output = so.stdout.split
40
- scala[:sbt] = output[3] if scala[:version]
37
+ begin
38
+ # sbt launcher version 0.13.7
39
+ so = shell_out("sbt --version")
40
+ if so.exitstatus == 0
41
+ scala[:sbt] = Mash.new
42
+ scala[:sbt][:version] = so.stdout.split[3]
43
+ end
44
+ rescue Ohai::Exceptions::Exec
45
+ # ignore shell_out failures
41
46
  end
47
+
48
+ languages[:scala] = scala unless scala.empty?
42
49
  end
43
50
  end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Matt Wrock (<matt@mattwrock.com>)
3
+ # Copyright:: Copyright (c) 2016 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ # After long discussion in IRC the "powers that be" have come to a concensus
20
+ # that there is no other Windows platforms exist that were not based on the
21
+ # Windows_NT kernel, so we herby decree that "windows" will refer to all
22
+ # platforms built upon the Windows_NT kernel and have access to win32 or win64
23
+ # subsystems.
24
+
25
+ Ohai.plugin(:Fips) do
26
+ provides "fips"
27
+
28
+ collect_data(:windows) do
29
+ require "win32/registry"
30
+ fips Mash.new
31
+
32
+ # from http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx
33
+ if ::RbConfig::CONFIG["target_cpu"] == "i386"
34
+ reg_type = Win32::Registry::KEY_READ | 0x100
35
+ elsif ::RbConfig::CONFIG["target_cpu"] == "x86_64"
36
+ reg_type = Win32::Registry::KEY_READ | 0x200
37
+ else
38
+ reg_type = Win32::Registry::KEY_READ
39
+ end
40
+
41
+ begin
42
+ Win32::Registry::HKEY_LOCAL_MACHINE.open('System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy', reg_type) do |policy|
43
+ enabled = policy["Enabled"]
44
+ fips["kernel"] = { "enabled" => enabled == 0 ? false : true }
45
+ end
46
+ rescue Win32::Registry::Error
47
+ fips["kernel"] = { "enabled" => false }
48
+ end
49
+ end
50
+ end
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = "8.14.0"
21
+ VERSION = "8.15.0"
22
22
  end
@@ -20,34 +20,50 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper.rb")
20
20
  require "open-uri"
21
21
 
22
22
  describe Ohai::System, "plugin azure" do
23
- before(:each) do
24
- @plugin = get_plugin("azure")
23
+ let(:plugin) { get_plugin("azure") }
24
+ let(:hint) {
25
+ {
26
+ "public_ip" => "137.135.46.202",
27
+ "vm_name" => "test-vm",
28
+ "public_fqdn" => "service.cloudapp.net",
29
+ "public_ssh_port" => "22",
30
+ "public_winrm_port" => "5985",
31
+ }
32
+ }
33
+
34
+ shared_examples_for "!azure" do
35
+ it "does not set the azure attribute" do
36
+ plugin.run
37
+ expect(plugin[:azure]).to be_nil
38
+ end
39
+ end
40
+
41
+ shared_examples_for "azure" do
42
+ it "sets the azure attribute" do
43
+ plugin.run
44
+ expect(plugin[:azure]).to be_truthy
45
+ end
25
46
  end
26
47
 
27
48
  describe "with azure hint file" do
28
49
  before(:each) do
29
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(true)
30
- allow(File).to receive(:read).with("/etc/chef/ohai/hints/azure.json").and_return('{"public_ip":"137.135.46.202","vm_name":"test-vm","public_fqdn":"service.cloudapp.net","public_ssh_port":"22", "public_winrm_port":"5985"}')
31
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(true)
32
- allow(File).to receive(:read).with('C:\chef\ohai\hints/azure.json').and_return('{"public_ip":"137.135.46.202","vm_name":"test-vm","public_fqdn":"service.cloudapp.net","public_ssh_port":"22", "public_winrm_port":"5985"}')
33
- @plugin.run
50
+ allow(plugin).to receive(:hint?).with("azure").and_return(hint)
34
51
  end
35
52
 
36
- it "should set the azure cloud attributes" do
37
- expect(@plugin[:azure]).not_to be_nil
38
- expect(@plugin[:azure]["public_ip"]).to eq("137.135.46.202")
39
- expect(@plugin[:azure]["vm_name"]).to eq("test-vm")
40
- expect(@plugin[:azure]["public_fqdn"]).to eq("service.cloudapp.net")
41
- expect(@plugin[:azure]["public_ssh_port"]).to eq("22")
42
- expect(@plugin[:azure]["public_winrm_port"]).to eq("5985")
53
+ it "sets the azure cloud attributes" do
54
+ plugin.run
55
+ expect(plugin[:azure]["public_ip"]).to eq("137.135.46.202")
56
+ expect(plugin[:azure]["vm_name"]).to eq("test-vm")
57
+ expect(plugin[:azure]["public_fqdn"]).to eq("service.cloudapp.net")
58
+ expect(plugin[:azure]["public_ssh_port"]).to eq("22")
59
+ expect(plugin[:azure]["public_winrm_port"]).to eq("5985")
43
60
  end
44
61
 
45
62
  end
46
63
 
47
64
  describe "without azure hint file or agent or dhcp options" do
48
65
  before(:each) do
49
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(false)
50
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(false)
66
+ allow(plugin).to receive(:hint?).with("azure").and_return(false)
51
67
  allow(File).to receive(:exist?).with("/usr/sbin/waagent").and_return(false)
52
68
  allow(Dir).to receive(:exist?).with('C:\WindowsAzure').and_return(false)
53
69
  allow(File).to receive(:exist?).with("/var/lib/dhcp/dhclient.eth0.leases").and_return(true)
@@ -73,66 +89,46 @@ describe Ohai::System, "plugin azure" do
73
89
  and_yield(" expire 2 2016/03/01 16:40:56;").
74
90
  and_yield("}")
75
91
  allow(File).to receive(:open).with("/var/lib/dhcp/dhclient.eth0.leases").and_return(@double_file)
76
- @plugin.run
77
92
  end
78
93
 
79
- it "should not behave like azure" do
80
- expect(@plugin[:azure]).to be_nil
81
- end
94
+ it_behaves_like "!azure"
82
95
  end
83
96
 
84
- describe "with rackspace hint file no agent and no dhcp lease" do
97
+ describe "with rackspace hint file, no agent, and no dhcp lease" do
85
98
  before(:each) do
86
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/rackspace.json").and_return(true)
87
- allow(File).to receive(:read).with("/etc/chef/ohai/hints/rackspace.json").and_return("")
88
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/rackspace.json').and_return(true)
89
- allow(File).to receive(:read).with('C:\chef\ohai\hints/rackspace.json').and_return("")
99
+ allow(plugin).to receive(:hint?).with("rackspace").and_return(true)
100
+ allow(plugin).to receive(:hint?).with("azure").and_return(false)
90
101
  allow(File).to receive(:exist?).with("/usr/sbin/waagent").and_return(false)
91
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(false)
92
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(false)
93
102
  allow(Dir).to receive(:exist?).with('C:\WindowsAzure').and_return(false)
94
103
  allow(File).to receive(:exist?).with("/var/lib/dhcp/dhclient.eth0.leases").and_return(false)
95
- @plugin.run
96
104
  end
97
105
 
98
- it "should not behave like azure" do
99
- expect(@plugin[:azure]).to be_nil
100
- end
106
+ it_behaves_like "!azure"
101
107
  end
102
108
 
103
109
  describe "without azure hint file but with agent on linux" do
104
110
  before(:each) do
105
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(false)
106
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(false)
111
+ allow(plugin).to receive(:hint?).with("azure").and_return(false)
107
112
  allow(File).to receive(:exist?).with("/usr/sbin/waagent").and_return(true)
108
113
  allow(Dir).to receive(:exist?).with('C:\WindowsAzure').and_return(false)
109
- @plugin.run
110
114
  end
111
115
 
112
- it "should create empty azure mash" do
113
- expect(@plugin[:azure]).to be_empty
114
- end
116
+ it_behaves_like "azure"
115
117
  end
116
118
 
117
119
  describe "without azure hint file but with agent on windows" do
118
120
  before(:each) do
119
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(false)
120
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(false)
121
+ allow(plugin).to receive(:hint?).with("azure").and_return(false)
121
122
  allow(File).to receive(:exist?).with("/usr/sbin/waagent").and_return(false)
122
123
  allow(Dir).to receive(:exist?).with('C:\WindowsAzure').and_return(true)
123
- @plugin.run
124
124
  end
125
125
 
126
- it "should create empty azure mash" do
127
- puts "The dir exists?:" + "#{Dir.exist?('C:\WindowsAzure')}"
128
- expect(@plugin[:azure]).to be_empty
129
- end
126
+ it_behaves_like "azure"
130
127
  end
131
128
 
132
129
  describe "without azure hint or agent but with dhcp option" do
133
130
  before(:each) do
134
- allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/azure.json").and_return(false)
135
- allow(File).to receive(:exist?).with('C:\chef\ohai\hints/azure.json').and_return(false)
131
+ allow(plugin).to receive(:hint?).with("azure").and_return(false)
136
132
  allow(File).to receive(:exist?).with("/usr/sbin/waagent").and_return(false)
137
133
  allow(Dir).to receive(:exist?).with('C:\WindowsAzure').and_return(false)
138
134
  allow(File).to receive(:exist?).with("/var/lib/dhcp/dhclient.eth0.leases").and_return(true)
@@ -158,13 +154,9 @@ describe Ohai::System, "plugin azure" do
158
154
  and_yield(" expire 5 2152/03/10 09:03:39;").
159
155
  and_yield("}")
160
156
  allow(File).to receive(:open).with("/var/lib/dhcp/dhclient.eth0.leases").and_return(@double_file)
161
- @plugin.run
162
157
  end
163
158
 
164
- it "should create empty azure mash" do
165
- puts "The dir exists?:" + "#{Dir.exist?('C:\WindowsAzure')}"
166
- expect(@plugin[:azure]).to be_empty
167
- end
159
+ it_behaves_like "azure"
168
160
  end
169
161
 
170
162
  end