ohai 13.3.0 → 13.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ohai/mixin/azure_metadata.rb +53 -0
  3. data/lib/ohai/plugins/aix/uptime.rb +25 -10
  4. data/lib/ohai/plugins/azure.rb +68 -8
  5. data/lib/ohai/plugins/cloud.rb +4 -2
  6. data/lib/ohai/plugins/digital_ocean.rb +3 -3
  7. data/lib/ohai/plugins/dragonflybsd/os.rb +1 -2
  8. data/lib/ohai/plugins/ec2.rb +24 -16
  9. data/lib/ohai/plugins/eucalyptus.rb +4 -4
  10. data/lib/ohai/plugins/freebsd/os.rb +1 -2
  11. data/lib/ohai/plugins/gce.rb +3 -3
  12. data/lib/ohai/plugins/hostname.rb +3 -3
  13. data/lib/ohai/plugins/linux/cpu.rb +33 -2
  14. data/lib/ohai/plugins/linux/filesystem.rb +47 -39
  15. data/lib/ohai/plugins/linux/systemd_paths.rb +3 -4
  16. data/lib/ohai/plugins/linux/virtualization.rb +6 -2
  17. data/lib/ohai/plugins/network.rb +2 -3
  18. data/lib/ohai/plugins/openstack.rb +2 -3
  19. data/lib/ohai/plugins/os.rb +1 -2
  20. data/lib/ohai/plugins/packages.rb +28 -2
  21. data/lib/ohai/plugins/passwd.rb +1 -2
  22. data/lib/ohai/plugins/rackspace.rb +1 -2
  23. data/lib/ohai/plugins/shard.rb +1 -2
  24. data/lib/ohai/plugins/softlayer.rb +1 -2
  25. data/lib/ohai/plugins/solaris2/virtualization.rb +1 -2
  26. data/lib/ohai/plugins/uptime.rb +1 -2
  27. data/lib/ohai/version.rb +1 -1
  28. data/spec/data/plugins/pacman.output +51 -0
  29. data/spec/unit/mixin/azure_metadata_spec.rb +67 -0
  30. data/spec/unit/mixin/softlayer_metadata_spec.rb +1 -1
  31. data/spec/unit/plugins/aix/uptime_spec.rb +7 -9
  32. data/spec/unit/plugins/azure_spec.rb +81 -0
  33. data/spec/unit/plugins/cloud_spec.rb +37 -5
  34. data/spec/unit/plugins/ec2_spec.rb +34 -12
  35. data/spec/unit/plugins/linux/cpu_spec.rb +123 -87
  36. data/spec/unit/plugins/linux/filesystem_spec.rb +12 -0
  37. data/spec/unit/plugins/linux/virtualization_spec.rb +11 -0
  38. data/spec/unit/plugins/packages_spec.rb +37 -0
  39. metadata +6 -3
@@ -288,24 +288,56 @@ describe Ohai::System, "plugin cloud" do
288
288
  describe "with Azure mash" do
289
289
  before do
290
290
  @plugin[:azure] = Mash.new
291
+ @plugin[:azure][:metadata] = {
292
+ "compute" =>
293
+ {
294
+ "location" => "westus",
295
+ "name" => "timtest",
296
+ "offer" => "UbuntuServer",
297
+ "osType" => "Linux",
298
+ "platformFaultDomain" => "0",
299
+ "platformUpdateDomain" => "0",
300
+ "publisher" => "Canonical",
301
+ "sku" => "16.04-LTS",
302
+ "version" => "16.04.201707270",
303
+ "vmId" => "f78151b3-da8b-4bd8-a592-d9ce8357e365",
304
+ "vmSize" => "Standard_DS2_v2",
305
+ },
306
+ "network" =>
307
+ {
308
+ "interfaces" =>
309
+ {
310
+ "000D3A37F080" =>
311
+ {
312
+ "mac" => "000D3A37F080",
313
+ "public_ipv6" => [],
314
+ "public_ipv4" => ["40.118.212.225"],
315
+ "local_ipv6" => [],
316
+ "local_ipv4" => ["10.0.1.6"],
317
+ },
318
+ },
319
+ "public_ipv4" => ["40.118.212.225"],
320
+ "local_ipv4" => ["10.0.1.6"],
321
+ "public_ipv6" => [],
322
+ "local_ipv6" => [],
323
+ },
324
+ }
291
325
  end
292
326
 
293
327
  it "populates cloud public ip" do
294
- @plugin[:azure]["public_ip"] = "174.129.150.8"
295
328
  @plugin.run
296
- expect(@plugin[:cloud][:public_ipv4_addrs][0]).to eq(@plugin[:azure]["public_ip"])
329
+ expect(@plugin[:cloud][:public_ipv4_addrs][0]).to eq("40.118.212.225")
297
330
  end
298
331
 
299
332
  it "doesn't populates cloud vm_name" do
300
- @plugin[:azure]["vm_name"] = "linux-vm"
301
333
  @plugin.run
302
- expect(@plugin[:cloud][:vm_name]).not_to eq(@plugin[:azure]["vm_name"])
334
+ expect(@plugin[:cloud][:vm_name]).not_to eq("timtest")
303
335
  end
304
336
 
305
337
  it "populates cloud public_hostname" do
306
338
  @plugin[:azure]["public_fqdn"] = "linux-vm-svc.cloudapp.net"
307
339
  @plugin.run
308
- expect(@plugin[:cloud][:public_hostname]).to eq(@plugin[:azure]["public_fqdn"])
340
+ expect(@plugin[:cloud][:public_hostname]).to eq("linux-vm-svc.cloudapp.net")
309
341
  end
310
342
 
311
343
  it "doesn't populate cloud public_ssh_port" do
@@ -23,14 +23,14 @@ require "base64"
23
23
 
24
24
  describe Ohai::System, "plugin ec2" do
25
25
 
26
+ let(:plugin) { get_plugin("ec2") }
27
+
26
28
  before(:each) do
27
29
  allow(plugin).to receive(:hint?).with("ec2").and_return(false)
28
30
  allow(File).to receive(:exist?).with("/sys/hypervisor/uuid").and_return(false)
29
31
  end
30
32
 
31
33
  shared_examples_for "!ec2" do
32
- let(:plugin) { get_plugin("ec2") }
33
-
34
34
  it "DOESN'T attempt to fetch the ec2 metadata or set ec2 attribute" do
35
35
  expect(plugin).not_to receive(:http_client)
36
36
  expect(plugin[:ec2]).to be_nil
@@ -39,8 +39,6 @@ describe Ohai::System, "plugin ec2" do
39
39
  end
40
40
 
41
41
  shared_examples_for "ec2" do
42
- let(:plugin) { get_plugin("ec2") }
43
-
44
42
  before(:each) do
45
43
  @http_client = double("Net::HTTP client")
46
44
  allow(plugin).to receive(:http_client).and_return(@http_client)
@@ -342,14 +340,6 @@ describe Ohai::System, "plugin ec2" do
342
340
  end
343
341
  end
344
342
 
345
- describe "with amazon kernel data" do
346
- it_behaves_like "ec2"
347
-
348
- before(:each) do
349
- plugin[:kernel] = { :os_info => { :organization => "Amazon.com" } }
350
- end
351
- end
352
-
353
343
  describe "with EC2 Xen UUID" do
354
344
  it_behaves_like "ec2"
355
345
 
@@ -368,6 +358,38 @@ describe Ohai::System, "plugin ec2" do
368
358
  end
369
359
  end
370
360
 
361
+ describe "with EC2 Identifying Number", :windows_only do
362
+ it_behaves_like "ec2"
363
+
364
+ before do
365
+ allow_any_instance_of(WmiLite::Wmi).to receive(:first_of).and_return(
366
+ { "caption" => "Computer System Product",
367
+ "description" => "Computer System Product",
368
+ "identifyingnumber" => "ec2a355a-91cd-5fe8-bbfc-cc891d0bf9d6",
369
+ "name" => "HVM domU",
370
+ "skunumber" => nil,
371
+ "uuid" => "5A352AEC-CD91-E85F-BBFC-CC891D0BF9D6",
372
+ "vendor" => "Xen",
373
+ "version" => "4.2.amazon" })
374
+ end
375
+ end
376
+
377
+ describe "without EC2 Identifying Number", :windows_only do
378
+ it_behaves_like "!ec2"
379
+
380
+ before do
381
+ allow_any_instance_of(WmiLite::Wmi).to receive(:first_of).and_return(
382
+ { "caption" => "Computer System Product",
383
+ "description" => "Computer System Product",
384
+ "identifyingnumber" => "1234",
385
+ "name" => "HVM domU",
386
+ "skunumber" => nil,
387
+ "uuid" => "5A352AEC-CD91-E85F-BBFC-CC891D0BF9D6",
388
+ "vendor" => "Xen",
389
+ "version" => "1.2.3" })
390
+ end
391
+ end
392
+
371
393
  describe "with ec2 hint file" do
372
394
  it_behaves_like "ec2"
373
395
 
@@ -79,30 +79,6 @@ end
79
79
  describe Ohai::System, "General Linux cpu plugin" do
80
80
  let(:plugin) { get_plugin("linux/cpu") }
81
81
 
82
- let(:cpuinfo_contents) do
83
- <<-EOF
84
- processor : 0
85
- vendor_id : GenuineIntel
86
- cpu family : 6
87
- model : 23
88
- model name : Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz
89
- stepping : 6
90
- cpu MHz : 1968.770
91
- cache size : 64 KB
92
- fdiv_bug : no
93
- hlt_bug : no
94
- f00f_bug : no
95
- coma_bug : no
96
- fpu : yes
97
- fpu_exception : yes
98
- cpuid level : 10
99
- wp : yes
100
- flags : fpu pse tsc msr mce cx8 sep mtrr pge cmov
101
- bogomips : 2575.86
102
- clflush size : 32
103
- EOF
104
- end
105
-
106
82
  let(:tempfile_handle) do
107
83
  tempfile = Tempfile.new("ohai-rspec-proc-cpuinfo")
108
84
  tempfile.write cpuinfo_contents
@@ -124,81 +100,139 @@ clflush size : 32
124
100
  end
125
101
  end
126
102
 
127
- it_behaves_like "Common cpu info", 1, 0
103
+ context "with old kernel that doesn't include cores in /proc/cpuinfo" do
104
+ let(:cpuinfo_contents) do
105
+ <<-EOF
106
+ processor : 0
107
+ vendor_id : GenuineIntel
108
+ cpu family : 6
109
+ model : 23
110
+ model name : Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz
111
+ stepping : 6
112
+ cpu MHz : 1968.770
113
+ cache size : 64 KB
114
+ fdiv_bug : no
115
+ hlt_bug : no
116
+ f00f_bug : no
117
+ coma_bug : no
118
+ fpu : yes
119
+ fpu_exception : yes
120
+ cpuid level : 10
121
+ wp : yes
122
+ flags : fpu pse tsc msr mce cx8 sep mtrr pge cmov
123
+ bogomips : 2575.86
124
+ clflush size : 32
125
+ EOF
126
+ end
128
127
 
129
- it "gets total cores" do
130
- plugin.run
131
- expect(plugin[:cpu][:cores]).to eql(0)
132
- end
128
+ let(:lscpu) do
129
+ <<-EOF
130
+ Architecture: x86_64
131
+ CPU op-mode(s): 32-bit, 64-bit
132
+ Byte Order: Little Endian
133
+ CPU(s): 1
134
+ On-line CPU(s) list: 0
135
+ Thread(s) per core: 1
136
+ Core(s) per socket: 1
137
+ Socket(s): 1
138
+ NUMA node(s): 1
139
+ Vendor ID: GenuineIntel
140
+ CPU family: 6
141
+ Model: 23
142
+ Model name: Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz
143
+ Stepping: 2
144
+ CPU MHz: 1968.770
145
+ BogoMIPS: 2575.86
146
+ Hypervisor vendor: Xen
147
+ Virtualization type: full
148
+ L1d cache: 32K
149
+ L1i cache: 32K
150
+ L2 cache: 256K
151
+ L3 cache: 30720K
152
+ NUMA node0 CPU(s): 0
153
+ Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
154
+ EOF
155
+ end
133
156
 
134
- it "doesn't have a cpu 1" do
135
- plugin.run
136
- expect(plugin[:cpu]).not_to have_key("1")
137
- end
157
+ it_behaves_like "Common cpu info", 1, 1
138
158
 
139
- it "has a vendor_id for cpu 0" do
140
- plugin.run
141
- expect(plugin[:cpu]["0"]).to have_key("vendor_id")
142
- expect(plugin[:cpu]["0"]["vendor_id"]).to eql("GenuineIntel")
143
- end
159
+ before(:each) do
160
+ allow(plugin).to receive(:shell_out).with("lscpu").and_return(mock_shell_out(0, lscpu, ""))
161
+ end
144
162
 
145
- it "has a family for cpu 0" do
146
- plugin.run
147
- expect(plugin[:cpu]["0"]).to have_key("family")
148
- expect(plugin[:cpu]["0"]["family"]).to eql("6")
149
- end
163
+ it "gets total cores" do
164
+ plugin.run
165
+ expect(plugin[:cpu][:cores]).to eql(1)
166
+ end
150
167
 
151
- it "has a model for cpu 0" do
152
- plugin.run
153
- expect(plugin[:cpu]["0"]).to have_key("model")
154
- expect(plugin[:cpu]["0"]["model"]).to eql("23")
155
- end
168
+ it "doesn't have a cpu 1" do
169
+ plugin.run
170
+ expect(plugin[:cpu]).not_to have_key("1")
171
+ end
156
172
 
157
- it "has a stepping for cpu 0" do
158
- plugin.run
159
- expect(plugin[:cpu]["0"]).to have_key("stepping")
160
- expect(plugin[:cpu]["0"]["stepping"]).to eql("6")
161
- end
173
+ it "has a vendor_id for cpu 0" do
174
+ plugin.run
175
+ expect(plugin[:cpu]["0"]).to have_key("vendor_id")
176
+ expect(plugin[:cpu]["0"]["vendor_id"]).to eql("GenuineIntel")
177
+ end
162
178
 
163
- it "doesn't have a phyiscal_id for cpu 0" do
164
- plugin.run
165
- expect(plugin[:cpu]["0"]).not_to have_key("physical_id")
166
- end
179
+ it "has a family for cpu 0" do
180
+ plugin.run
181
+ expect(plugin[:cpu]["0"]).to have_key("family")
182
+ expect(plugin[:cpu]["0"]["family"]).to eql("6")
183
+ end
167
184
 
168
- it "doesn't have a core_id for cpu 0" do
169
- plugin.run
170
- expect(plugin[:cpu]["0"]).not_to have_key("core_id")
171
- end
185
+ it "has a model for cpu 0" do
186
+ plugin.run
187
+ expect(plugin[:cpu]["0"]).to have_key("model")
188
+ expect(plugin[:cpu]["0"]["model"]).to eql("23")
189
+ end
172
190
 
173
- it "doesn't have a cores for cpu 0" do
174
- plugin.run
175
- expect(plugin[:cpu]["0"]).not_to have_key("cores")
176
- end
191
+ it "has a stepping for cpu 0" do
192
+ plugin.run
193
+ expect(plugin[:cpu]["0"]).to have_key("stepping")
194
+ expect(plugin[:cpu]["0"]["stepping"]).to eql("6")
195
+ end
177
196
 
178
- it "has a model name for cpu 0" do
179
- plugin.run
180
- expect(plugin[:cpu]["0"]).to have_key("model_name")
181
- expect(plugin[:cpu]["0"]["model_name"]).to eql("Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz")
182
- end
197
+ it "doesn't have a phyiscal_id for cpu 0" do
198
+ plugin.run
199
+ expect(plugin[:cpu]["0"]).not_to have_key("physical_id")
200
+ end
183
201
 
184
- it "has a mhz for cpu 0" do
185
- plugin.run
186
- expect(plugin[:cpu]["0"]).to have_key("mhz")
187
- expect(plugin[:cpu]["0"]["mhz"]).to eql("1968.770")
188
- end
202
+ it "doesn't have a core_id for cpu 0" do
203
+ plugin.run
204
+ expect(plugin[:cpu]["0"]).not_to have_key("core_id")
205
+ end
189
206
 
190
- it "has a cache_size for cpu 0" do
191
- plugin.run
192
- expect(plugin[:cpu]["0"]).to have_key("cache_size")
193
- expect(plugin[:cpu]["0"]["cache_size"]).to eql("64 KB")
194
- end
207
+ it "doesn't have a cores for cpu 0" do
208
+ plugin.run
209
+ expect(plugin[:cpu]["0"]).not_to have_key("cores")
210
+ end
195
211
 
196
- it "has flags for cpu 0" do
197
- plugin.run
198
- expect(plugin[:cpu]["0"]).to have_key("flags")
199
- expect(plugin[:cpu]["0"]["flags"]).to eq(%w{fpu pse tsc msr mce cx8 sep mtrr pge cmov})
200
- end
212
+ it "has a model name for cpu 0" do
213
+ plugin.run
214
+ expect(plugin[:cpu]["0"]).to have_key("model_name")
215
+ expect(plugin[:cpu]["0"]["model_name"]).to eql("Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz")
216
+ end
217
+
218
+ it "has a mhz for cpu 0" do
219
+ plugin.run
220
+ expect(plugin[:cpu]["0"]).to have_key("mhz")
221
+ expect(plugin[:cpu]["0"]["mhz"]).to eql("1968.770")
222
+ end
223
+
224
+ it "has a cache_size for cpu 0" do
225
+ plugin.run
226
+ expect(plugin[:cpu]["0"]).to have_key("cache_size")
227
+ expect(plugin[:cpu]["0"]["cache_size"]).to eql("64 KB")
228
+ end
201
229
 
230
+ it "has flags for cpu 0" do
231
+ plugin.run
232
+ expect(plugin[:cpu]["0"]).to have_key("flags")
233
+ expect(plugin[:cpu]["0"]["flags"]).to eq(%w{fpu pse tsc msr mce cx8 sep mtrr pge cmov})
234
+ end
235
+ end
202
236
  context "with a dual-core hyperthreaded /proc/cpuinfo" do
203
237
  let(:cpuinfo_contents) do
204
238
  <<-EOF
@@ -331,6 +365,7 @@ describe Ohai::System, "S390 linux cpu plugin" do
331
365
 
332
366
  before(:each) do
333
367
  allow(plugin).to receive(:collect_os).and_return(:linux)
368
+ allow(plugin).to receive(:shell_out).with("lscpu").and_return(mock_shell_out(1, "", ""))
334
369
 
335
370
  @double_file = double("/proc/cpuinfo")
336
371
  allow(@double_file).to receive(:each).
@@ -343,7 +378,7 @@ describe Ohai::System, "S390 linux cpu plugin" do
343
378
  allow(File).to receive(:open).with("/proc/cpuinfo").and_return(@double_file)
344
379
  end
345
380
 
346
- it_behaves_like "Common cpu info", 2, 0
381
+ it_behaves_like "Common cpu info", 2, nil
347
382
 
348
383
  it "has a cpu 1" do
349
384
  plugin.run
@@ -377,6 +412,7 @@ describe Ohai::System, "arm64 linux cpu plugin" do
377
412
 
378
413
  before(:each) do
379
414
  allow(plugin).to receive(:collect_os).and_return(:linux)
415
+ allow(plugin).to receive(:shell_out).with("lscpu").and_return(mock_shell_out(1, "", ""))
380
416
 
381
417
  @double_file = double("/proc/cpuinfo")
382
418
  allow(@double_file).to receive(:each).
@@ -391,7 +427,7 @@ describe Ohai::System, "arm64 linux cpu plugin" do
391
427
  allow(File).to receive(:open).with("/proc/cpuinfo").and_return(@double_file)
392
428
  end
393
429
 
394
- it_behaves_like "Common cpu info", 2, 0
430
+ it_behaves_like "Common cpu info", 2, nil
395
431
 
396
432
  it "has a cpu 1" do
397
433
  plugin.run
@@ -27,6 +27,8 @@ describe Ohai::System, "Linux filesystem plugin" do
27
27
  allow(plugin).to receive(:shell_out).with("df -iP").and_return(mock_shell_out(0, "", ""))
28
28
  allow(plugin).to receive(:shell_out).with("mount").and_return(mock_shell_out(0, "", ""))
29
29
  allow(plugin).to receive(:which).with("lsblk").and_return(nil)
30
+ allow(plugin).to receive(:which).with("df").and_return("/bin/df")
31
+ allow(plugin).to receive(:which).with("mount").and_return("/bin/mount")
30
32
  allow(plugin).to receive(:which).with("blkid").and_return("/sbin/blkid")
31
33
  allow(plugin).to receive(:shell_out).with("/sbin/blkid", timeout: 60).and_return(mock_shell_out(0, "", ""))
32
34
 
@@ -529,4 +531,14 @@ BLKID_TYPE
529
531
  expect(plugin[:filesystem]["by_mountpoint"]["/mnt"][:devices]).to eq(["/dev/sdb1", "/dev/sdc1"])
530
532
  end
531
533
  end
534
+
535
+ %w{df mount}.each do |command|
536
+ describe "when #{command} does not exist" do
537
+ it "logs warning about #{command} missing" do
538
+ allow(plugin).to receive(:shell_out).with(/#{command}/).and_raise(Ohai::Exceptions::Exec)
539
+ expect(Ohai::Log).to receive(:warn).with("Plugin Filesystem: #{command} binary is not available. Some data will not be available.")
540
+ plugin.run
541
+ end
542
+ end
543
+ end
532
544
  end
@@ -552,6 +552,7 @@ CGROUP
552
552
  2:cpu:/Charlie
553
553
  1:cpuset:/Charlie
554
554
  CGROUP
555
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
555
556
  expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
556
557
  allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
557
558
  plugin.run
@@ -572,6 +573,7 @@ CGROUP
572
573
  CGROUP
573
574
  expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
574
575
  allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
576
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
575
577
  end
576
578
 
577
579
  it "sets lxc host if lxc-version exists" do
@@ -600,6 +602,14 @@ CGROUP
600
602
  expect(plugin[:virtualization]).to eq({ "systems" => {} })
601
603
  end
602
604
 
605
+ it "sets lxc guest if /proc/1/environ has lxccontainer string in it" do
606
+ one_environ = "container=lxccontainer_ttys=/dev/pts/0 /dev/pts/1 /dev/pts/2 /dev/pts/3".chomp
607
+ allow(File).to receive(:read).with("/proc/1/environ").and_return(one_environ)
608
+ plugin.run
609
+ expect(plugin[:virtualization][:system]).to eq("lxc")
610
+ expect(plugin[:virtualization][:role]).to eq("guest")
611
+ end
612
+
603
613
  end
604
614
 
605
615
  it "does not set virtualization if /proc/self/cgroup isn't there" do
@@ -682,6 +692,7 @@ CGROUP
682
692
  CGROUP
683
693
  allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
684
694
  allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
695
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
685
696
  plugin.run
686
697
  expect(plugin[:virtualization]).to eq({ "systems" => {} })
687
698
  end