ohai 8.13.0 → 8.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/lib/ohai/common/dmi.rb +1 -1
- data/lib/ohai/config.rb +2 -2
- data/lib/ohai/dsl/plugin.rb +1 -1
- data/lib/ohai/loader.rb +1 -1
- data/lib/ohai/mixin/command.rb +18 -5
- data/lib/ohai/mixin/ec2_metadata.rb +1 -1
- data/lib/ohai/plugins/aix/os.rb +1 -1
- data/lib/ohai/plugins/c.rb +49 -67
- data/lib/ohai/plugins/darwin/memory.rb +1 -1
- data/lib/ohai/plugins/darwin/network.rb +3 -3
- data/lib/ohai/plugins/darwin/platform.rb +1 -1
- data/lib/ohai/plugins/darwin/system_profiler.rb +1 -1
- data/lib/ohai/plugins/digital_ocean.rb +1 -1
- data/lib/ohai/plugins/ec2.rb +42 -41
- data/lib/ohai/plugins/erlang.rb +1 -1
- data/lib/ohai/plugins/ip_scopes.rb +1 -1
- data/lib/ohai/plugins/kernel.rb +1 -1
- data/lib/ohai/plugins/linux/network.rb +2 -2
- data/lib/ohai/plugins/linux/platform.rb +6 -1
- data/lib/ohai/plugins/mono.rb +1 -1
- data/lib/ohai/plugins/network.rb +2 -2
- data/lib/ohai/plugins/packages.rb +59 -46
- data/lib/ohai/plugins/python.rb +2 -2
- data/lib/ohai/plugins/rackspace.rb +4 -4
- data/lib/ohai/plugins/sigar/network.rb +1 -1
- data/lib/ohai/plugins/sigar/network_route.rb +1 -1
- data/lib/ohai/plugins/solaris2/dmi.rb +1 -1
- data/lib/ohai/plugins/solaris2/network.rb +25 -8
- data/lib/ohai/plugins/ssh_host_key.rb +1 -1
- data/lib/ohai/plugins/windows/network.rb +5 -5
- data/lib/ohai/provides_map.rb +2 -2
- data/lib/ohai/system.rb +1 -1
- data/lib/ohai/version.rb +1 -1
- data/spec/functional/loader_spec.rb +1 -1
- data/spec/unit/mixin/command_spec.rb +118 -0
- data/spec/unit/plugins/aix/os_spec.rb +6 -5
- data/spec/unit/plugins/c_spec.rb +169 -118
- data/spec/unit/plugins/digital_ocean_spec.rb +7 -7
- data/spec/unit/plugins/dmi_spec.rb +4 -4
- data/spec/unit/plugins/ec2_spec.rb +64 -69
- data/spec/unit/plugins/linode_spec.rb +6 -6
- data/spec/unit/plugins/linux/platform_spec.rb +7 -0
- data/spec/unit/plugins/linux/sessions_spec.rb +2 -2
- data/spec/unit/plugins/network_spec.rb +16 -16
- data/spec/unit/plugins/openstack_spec.rb +1 -1
- data/spec/unit/plugins/packages_spec.rb +165 -191
- data/spec/unit/plugins/rackspace_spec.rb +203 -130
- data/spec/unit/plugins/solaris2/filesystem.rb +2 -2
- data/spec/unit/plugins/solaris2/network_spec.rb +36 -5
- metadata +3 -3
@@ -20,252 +20,226 @@
|
|
20
20
|
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper.rb")
|
21
21
|
|
22
22
|
describe Ohai::System, "plugin packages" do
|
23
|
-
context "
|
24
|
-
before do
|
25
|
-
Ohai.config[:plugin][:packages][:enabled] = false
|
26
|
-
allow(plugin).to receive(:collect_os).and_return(platform_family.to_s)
|
27
|
-
plugin.run
|
28
|
-
end
|
29
|
-
|
23
|
+
context "on debian" do
|
30
24
|
let(:plugin) do
|
31
25
|
get_plugin("packages").tap do |plugin|
|
32
|
-
plugin[:platform_family] =
|
26
|
+
plugin[:platform_family] = "debian"
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
36
|
-
|
37
|
-
|
38
|
-
let(:platform_family) { os }
|
39
|
-
|
40
|
-
it "does not enumerate the packages" do
|
41
|
-
expect(plugin[:packages]).to eq(nil)
|
42
|
-
end
|
43
|
-
end
|
30
|
+
let(:stdout) do
|
31
|
+
File.read(File.join(SPEC_PLUGIN_PATH, "dpkg-query.output"))
|
44
32
|
end
|
45
|
-
end
|
46
33
|
|
47
|
-
|
48
|
-
|
49
|
-
|
34
|
+
before(:each) do
|
35
|
+
allow(plugin).to receive(:collect_os).and_return(:linux)
|
36
|
+
allow(plugin).to receive(:shell_out)
|
37
|
+
.with("dpkg-query -W")
|
38
|
+
.and_return(mock_shell_out(0, stdout, ""))
|
39
|
+
plugin.run
|
50
40
|
end
|
51
41
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
42
|
+
it "calls dpkg query" do
|
43
|
+
expect(plugin).to receive(:shell_out)
|
44
|
+
.with("dpkg-query -W")
|
45
|
+
.and_return(mock_shell_out(0, stdout, ""))
|
46
|
+
plugin.run
|
47
|
+
end
|
58
48
|
|
59
|
-
|
60
|
-
|
61
|
-
|
49
|
+
it "gets packages and versions" do
|
50
|
+
expect(plugin[:packages]["vim-common"][:version]).to eq("2:7.4.052-1ubuntu3")
|
51
|
+
end
|
52
|
+
end
|
62
53
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
.and_return(mock_shell_out(0, stdout, ""))
|
68
|
-
plugin.run
|
54
|
+
context "on fedora" do
|
55
|
+
let(:plugin) do
|
56
|
+
get_plugin("packages").tap do |plugin|
|
57
|
+
plugin[:platform_family] = "fedora"
|
69
58
|
end
|
59
|
+
end
|
70
60
|
|
71
|
-
|
72
|
-
expect(plugin).to receive(:shell_out)
|
73
|
-
.with("dpkg-query -W")
|
74
|
-
.and_return(mock_shell_out(0, stdout, ""))
|
75
|
-
plugin.run
|
76
|
-
end
|
61
|
+
let(:format) { Shellwords.escape '%{NAME}\t%{VERSION}\t%{RELEASE}\n' }
|
77
62
|
|
78
|
-
|
79
|
-
|
80
|
-
end
|
63
|
+
let(:stdout) do
|
64
|
+
File.read(File.join(SPEC_PLUGIN_PATH, "rpmquery.output"))
|
81
65
|
end
|
82
66
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
67
|
+
before(:each) do
|
68
|
+
allow(plugin).to receive(:collect_os).and_return(:linux)
|
69
|
+
allow(plugin).to receive(:shell_out).with("rpm -qa --queryformat #{format}").and_return(mock_shell_out(0, stdout, ""))
|
70
|
+
plugin.run
|
71
|
+
end
|
89
72
|
|
90
|
-
|
73
|
+
it "calls rpm -qa" do
|
74
|
+
expect(plugin).to receive(:shell_out)
|
75
|
+
.with("rpm -qa --queryformat #{format}")
|
76
|
+
.and_return(mock_shell_out(0, stdout, ""))
|
77
|
+
plugin.run
|
78
|
+
end
|
91
79
|
|
92
|
-
|
93
|
-
|
94
|
-
|
80
|
+
it "gets packages and versions/release" do
|
81
|
+
expect(plugin[:packages]["vim-common"][:version]).to eq("7.2.411")
|
82
|
+
expect(plugin[:packages]["vim-common"][:release]).to eq("1.8.el6")
|
83
|
+
end
|
84
|
+
end
|
95
85
|
|
96
|
-
|
97
|
-
allow(plugin).to receive(:collect_os).and_return(:linux)
|
98
|
-
allow(plugin).to receive(:shell_out).with("rpm -qa --queryformat #{format}").and_return(mock_shell_out(0, stdout, ""))
|
99
|
-
plugin.run
|
100
|
-
end
|
86
|
+
context "on windows", :windows_only do
|
101
87
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
.and_return(mock_shell_out(0, stdout, ""))
|
106
|
-
plugin.run
|
88
|
+
let(:plugin) do
|
89
|
+
get_plugin("packages").tap do |plugin|
|
90
|
+
plugin[:platform_family] = "windows"
|
107
91
|
end
|
92
|
+
end
|
108
93
|
|
109
|
-
|
110
|
-
|
111
|
-
expect(plugin[:packages]["vim-common"][:release]).to eq("1.8.el6")
|
112
|
-
end
|
94
|
+
let(:win_reg_double) do
|
95
|
+
instance_double("Win32::Registry")
|
113
96
|
end
|
114
97
|
|
115
|
-
|
116
|
-
|
98
|
+
let(:win_reg_keys) do
|
99
|
+
[ "{22FA28AB-3C1B-438B-A8B5-E23892C8B567}",
|
100
|
+
"{0D4BCDCD-6225-4BA5-91A3-54AFCECC281E}" ]
|
101
|
+
end
|
117
102
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
end
|
122
|
-
end
|
103
|
+
let(:i386_reg_type) do
|
104
|
+
Win32::Registry::KEY_READ | 0x100
|
105
|
+
end
|
123
106
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
"description" => "NXLOG-CE",
|
128
|
-
"helplink" => nil,
|
129
|
-
"helptelephone" => nil,
|
130
|
-
"identifyingnumber" => "{22FA28AB-3C1B-438B-A8B5-E23892C8B567}",
|
131
|
-
"installdate" => "20150511",
|
132
|
-
"installdate2" => nil,
|
133
|
-
"installlocation" => nil,
|
134
|
-
"installsource" => 'C:\\chef\\cache\\',
|
135
|
-
"installstate" => 5,
|
136
|
-
"language" => "1033",
|
137
|
-
"localpackage" => 'C:\\Windows\\Installer\\30884.msi',
|
138
|
-
"name" => "NXLOG-CE",
|
139
|
-
"packagecache" => 'C:\\Windows\\Installer\\30884.msi',
|
140
|
-
"packagecode" => "{EC3A13C4-4634-47FC-9662-DC293CB96F9F}",
|
141
|
-
"packagename" => "nexlog-ce-2.8.1248.msi",
|
142
|
-
"productid" => nil,
|
143
|
-
"regcompany" => nil,
|
144
|
-
"regowner" => nil,
|
145
|
-
"skunumber" => nil,
|
146
|
-
"transforms" => nil,
|
147
|
-
"urlinfoabout" => nil,
|
148
|
-
"urlupdateinfo" => nil,
|
149
|
-
"vendor" => "nxsec.com",
|
150
|
-
"version" => "2.8.1248",
|
151
|
-
"wordcount" => 2 },
|
152
|
-
{ "assignmenttype" => 1,
|
153
|
-
"caption" => "Chef Development Kit v0.7.0",
|
154
|
-
"description" => "Chef Development Kit v0.7.0",
|
155
|
-
"helplink" => "http://www.getchef.com/support/",
|
156
|
-
"helptelephone" => nil,
|
157
|
-
"identifyingnumber" => "{90754A33-404C-4172-8F3B-7F04CE98011C}",
|
158
|
-
"installdate" => "20150925", "installdate2" => nil,
|
159
|
-
"installlocation" => nil,
|
160
|
-
"installsource" => 'C:\\Users\\skhajamohid1\\Downloads\\',
|
161
|
-
"installstate" => 5, "language" => "1033",
|
162
|
-
"localpackage" => 'C:\\WINDOWS\\Installer\\d9e1ca7.msi',
|
163
|
-
"name" => "Chef Development Kit v0.7.0",
|
164
|
-
"packagecache" => 'C:\\WINDOWS\\Installer\\d9e1ca7.msi',
|
165
|
-
"packagecode" => "{9B82FB86-40AE-4CDF-9DE8-97574F9395B9}",
|
166
|
-
"packagename" => "chefdk-0.7.0-1 (2).msi",
|
167
|
-
"productid" => nil,
|
168
|
-
"regcompany" => nil,
|
169
|
-
"regowner" => nil,
|
170
|
-
"skunumber" => nil,
|
171
|
-
"transforms" => nil,
|
172
|
-
"urlinfoabout" => nil,
|
173
|
-
"urlupdateinfo" => nil,
|
174
|
-
"vendor" => "\"Chef Software, Inc. <maintainers@chef.io>\"",
|
175
|
-
"version" => "0.7.0.1",
|
176
|
-
"wordcount" => 2 }]
|
177
|
-
end
|
107
|
+
let(:x86_64_reg_type) do
|
108
|
+
Win32::Registry::KEY_READ | 0x200
|
109
|
+
end
|
178
110
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
111
|
+
let(:win_reg_output) do
|
112
|
+
[{ "DisplayName" => "NXLOG-CE",
|
113
|
+
"DisplayVersion" => "2.8.1248",
|
114
|
+
"Publisher" => "nxsec.com",
|
115
|
+
"InstallDate" => "20150511",
|
116
|
+
},
|
117
|
+
{ "DisplayName" => "Chef Development Kit v0.7.0",
|
118
|
+
"DisplayVersion" => "0.7.0.1",
|
119
|
+
"Publisher" => "\"Chef Software, Inc. <maintainers@chef.io>\"",
|
120
|
+
"InstallDate" => "20150925" }]
|
121
|
+
end
|
184
122
|
|
123
|
+
shared_examples "windows_package_plugin" do
|
185
124
|
it "gets package info" do
|
125
|
+
plugin.run
|
186
126
|
expect(plugin[:packages]["Chef Development Kit v0.7.0"][:version]).to eq("0.7.0.1")
|
187
|
-
expect(plugin[:packages]["Chef Development Kit v0.7.0"][:
|
127
|
+
expect(plugin[:packages]["Chef Development Kit v0.7.0"][:publisher]).to eq("\"Chef Software, Inc. <maintainers@chef.io>\"")
|
188
128
|
expect(plugin[:packages]["Chef Development Kit v0.7.0"][:installdate]).to eq("20150925")
|
189
129
|
|
190
130
|
expect(plugin[:packages]["NXLOG-CE"][:version]).to eq("2.8.1248")
|
191
|
-
expect(plugin[:packages]["NXLOG-CE"][:
|
131
|
+
expect(plugin[:packages]["NXLOG-CE"][:publisher]).to eq("nxsec.com")
|
192
132
|
expect(plugin[:packages]["NXLOG-CE"][:installdate]).to eq("20150511")
|
193
133
|
end
|
194
134
|
end
|
195
135
|
|
196
|
-
|
197
|
-
|
136
|
+
before(:each) do
|
137
|
+
allow(plugin).to receive(:collect_os).and_return(:windows)
|
138
|
+
allow(win_reg_double).to receive(:open).with(win_reg_keys[0]).and_return(win_reg_output[0])
|
139
|
+
allow(win_reg_double).to receive(:open).with(win_reg_keys[1]).and_return(win_reg_output[1])
|
140
|
+
allow(win_reg_double).to receive(:each_key).and_yield(win_reg_keys[0], 0).and_yield(win_reg_keys[1], 1)
|
141
|
+
end
|
198
142
|
|
199
|
-
|
200
|
-
|
143
|
+
describe "on 32 bit ruby" do
|
144
|
+
before do
|
145
|
+
stub_const("::RbConfig::CONFIG", { "target_cpu" => "i386" } )
|
146
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Microsoft\Windows\CurrentVersion\Uninstall', i386_reg_type).and_yield(win_reg_double)
|
147
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall', i386_reg_type).and_yield(win_reg_double)
|
201
148
|
end
|
149
|
+
it_behaves_like "windows_package_plugin"
|
150
|
+
end
|
202
151
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
152
|
+
describe "on 64 bit ruby" do
|
153
|
+
before do
|
154
|
+
stub_const("::RbConfig::CONFIG", { "target_cpu" => "x86_64" } )
|
155
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Microsoft\Windows\CurrentVersion\Uninstall', x86_64_reg_type).and_yield(win_reg_double)
|
156
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall', x86_64_reg_type).and_yield(win_reg_double)
|
207
157
|
end
|
158
|
+
it_behaves_like "windows_package_plugin"
|
159
|
+
end
|
208
160
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
161
|
+
describe "on unknown ruby" do
|
162
|
+
before do
|
163
|
+
stub_const("::RbConfig::CONFIG", { "target_cpu" => nil } )
|
164
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Microsoft\Windows\CurrentVersion\Uninstall', Win32::Registry::KEY_READ).and_yield(win_reg_double)
|
165
|
+
allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall', Win32::Registry::KEY_READ).and_yield(win_reg_double)
|
214
166
|
end
|
167
|
+
it_behaves_like "windows_package_plugin"
|
168
|
+
end
|
169
|
+
end
|
215
170
|
|
216
|
-
|
217
|
-
|
218
|
-
|
171
|
+
context "on aix" do
|
172
|
+
let(:plugin) { get_plugin("packages") }
|
173
|
+
|
174
|
+
let(:stdout) do
|
175
|
+
File.read(File.join(SPEC_PLUGIN_PATH, "lslpp.output"))
|
219
176
|
end
|
220
177
|
|
221
|
-
|
222
|
-
|
178
|
+
before(:each) do
|
179
|
+
allow(plugin).to receive(:collect_os).and_return(:aix)
|
180
|
+
allow(plugin).to receive(:shell_out).with("lslpp -L -q -c").and_return(mock_shell_out(0, stdout, ""))
|
181
|
+
plugin.run
|
182
|
+
end
|
223
183
|
|
224
|
-
|
225
|
-
|
226
|
-
|
184
|
+
it "calls lslpp -L -q -c" do
|
185
|
+
expect(plugin).to receive(:shell_out)
|
186
|
+
.with("lslpp -L -q -c")
|
187
|
+
.and_return(mock_shell_out(0, stdout, ""))
|
188
|
+
plugin.run
|
189
|
+
end
|
227
190
|
|
228
|
-
|
229
|
-
|
230
|
-
|
191
|
+
it "gets packages with version" do
|
192
|
+
expect(plugin[:packages]["chef"][:version]).to eq("12.5.1.1")
|
193
|
+
end
|
194
|
+
end
|
231
195
|
|
232
|
-
|
233
|
-
|
234
|
-
allow(plugin).to receive(:shell_out).with("pkg list -H").and_return(mock_shell_out(0, pkglist_output, ""))
|
235
|
-
allow(plugin).to receive(:shell_out).with("pkginfo -l").and_return(mock_shell_out(0, pkginfo_output, ""))
|
236
|
-
plugin.run
|
237
|
-
end
|
196
|
+
context "on solaris2" do
|
197
|
+
let(:plugin) { get_plugin("packages") }
|
238
198
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
.and_return(mock_shell_out(0, pkglist_output, ""))
|
243
|
-
plugin.run
|
244
|
-
end
|
199
|
+
let(:pkglist_output) do
|
200
|
+
File.read(File.join(SPEC_PLUGIN_PATH, "pkglist.output"))
|
201
|
+
end
|
245
202
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
.and_return(mock_shell_out(0, pkginfo_output, ""))
|
250
|
-
plugin.run
|
251
|
-
end
|
203
|
+
let(:pkginfo_output) do
|
204
|
+
File.read(File.join(SPEC_PLUGIN_PATH, "pkginfo.output"))
|
205
|
+
end
|
252
206
|
|
253
|
-
|
254
|
-
|
255
|
-
|
207
|
+
before(:each) do
|
208
|
+
allow(plugin).to receive(:collect_os).and_return(:solaris2)
|
209
|
+
allow(plugin).to receive(:shell_out).with("pkg list -H").and_return(mock_shell_out(0, pkglist_output, ""))
|
210
|
+
allow(plugin).to receive(:shell_out).with("pkginfo -l").and_return(mock_shell_out(0, pkginfo_output, ""))
|
211
|
+
plugin.run
|
212
|
+
end
|
256
213
|
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
214
|
+
it "calls pkg list -H" do
|
215
|
+
expect(plugin).to receive(:shell_out)
|
216
|
+
.with("pkg list -H")
|
217
|
+
.and_return(mock_shell_out(0, pkglist_output, ""))
|
218
|
+
plugin.run
|
219
|
+
end
|
261
220
|
|
262
|
-
|
263
|
-
|
264
|
-
|
221
|
+
it "calls pkginfo -l" do
|
222
|
+
expect(plugin).to receive(:shell_out)
|
223
|
+
.with("pkginfo -l")
|
224
|
+
.and_return(mock_shell_out(0, pkginfo_output, ""))
|
225
|
+
plugin.run
|
226
|
+
end
|
265
227
|
|
266
|
-
|
267
|
-
|
268
|
-
|
228
|
+
it "gets ips packages with version" do
|
229
|
+
expect(plugin[:packages]["chef"][:version]).to eq("12.5.1")
|
230
|
+
end
|
231
|
+
|
232
|
+
it "gets ips packages with version and publisher" do
|
233
|
+
expect(plugin[:packages]["system/EMCpower"][:version]).to eq("6.0.0.1.0-3")
|
234
|
+
expect(plugin[:packages]["system/EMCpower"][:publisher]).to eq("emc.com")
|
235
|
+
end
|
236
|
+
|
237
|
+
it "gets sysv packages with version" do
|
238
|
+
expect(plugin[:packages]["chef"][:version]).to eq("12.5.1")
|
239
|
+
end
|
240
|
+
|
241
|
+
it "gets sysv packages with version" do
|
242
|
+
expect(plugin[:packages]["mqm"][:version]).to eq("7.0.1.4")
|
269
243
|
end
|
270
244
|
end
|
271
245
|
end
|
@@ -20,110 +20,118 @@ require "resolv"
|
|
20
20
|
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper.rb")
|
21
21
|
|
22
22
|
describe Ohai::System, "plugin rackspace" do
|
23
|
+
let(:plugin) { get_plugin("rackspace") }
|
24
|
+
|
23
25
|
before(:each) do
|
24
26
|
allow(Resolv).to receive(:getname).and_return("1.2.3.4")
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
27
|
+
|
28
|
+
plugin[:hostname] = "katie"
|
29
|
+
|
30
|
+
plugin[:network] = {
|
31
|
+
:interfaces => {
|
32
|
+
:eth0 => {
|
33
|
+
"addresses" => {
|
34
|
+
"1.2.3.4" => {
|
35
|
+
"broadcast" => "67.23.20.255",
|
36
|
+
"netmask" => "255.255.255.0",
|
37
|
+
"family" => "inet",
|
38
|
+
},
|
39
|
+
"2a00:1a48:7805:111:e875:efaf:ff08:75" => {
|
40
|
+
"family" => "inet6",
|
41
|
+
"prefixlen" => "64",
|
42
|
+
"scope" => "Global",
|
43
|
+
},
|
44
|
+
"fe80::4240:95ff:fe47:6eed" => {
|
45
|
+
"scope" => "Link",
|
46
|
+
"prefixlen" => "64",
|
47
|
+
"family" => "inet6",
|
48
|
+
},
|
49
|
+
"40:40:95:47:6E:ED" => {
|
50
|
+
"family" => "lladdr",
|
51
|
+
},
|
52
|
+
},
|
53
|
+
},
|
45
54
|
},
|
46
|
-
} }
|
47
55
|
}
|
48
|
-
}
|
49
56
|
|
50
|
-
|
51
|
-
|
52
|
-
"
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
"
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
"
|
57
|
+
plugin[:network][:interfaces][:eth1] = {
|
58
|
+
:addresses => {
|
59
|
+
"fe80::4240:f5ff:feab:2836" => {
|
60
|
+
"scope" => "Link",
|
61
|
+
"prefixlen" => "64",
|
62
|
+
"family" => "inet6",
|
63
|
+
},
|
64
|
+
"5.6.7.8" => {
|
65
|
+
"broadcast" => "10.176.191.255",
|
66
|
+
"netmask" => "255.255.224.0",
|
67
|
+
"family" => "inet",
|
68
|
+
},
|
69
|
+
"40:40:F5:AB:28:36" => {
|
70
|
+
"family" => "lladdr",
|
71
|
+
},
|
63
72
|
},
|
64
|
-
}
|
73
|
+
}
|
65
74
|
|
66
75
|
# In olden days we could detect rackspace by a -rscloud suffix on the kernel
|
67
76
|
# This is here to make #has_rackspace_kernel? fail until we remove that check
|
68
|
-
|
77
|
+
plugin[:kernel] = { :release => "1.2.13-not-rackspace" }
|
69
78
|
|
70
79
|
# We need a generic stub here for the later stubs with arguments to work
|
71
80
|
# Because, magic.
|
72
|
-
allow(
|
81
|
+
allow(plugin).to receive(:shell_out).and_return(mock_shell_out(1, "", ""))
|
73
82
|
end
|
74
83
|
|
75
84
|
shared_examples_for "!rackspace" do
|
76
|
-
it "
|
77
|
-
|
78
|
-
expect(
|
85
|
+
it "does not create rackspace" do
|
86
|
+
plugin.run
|
87
|
+
expect(plugin[:rackspace]).to be_nil
|
79
88
|
end
|
80
89
|
end
|
81
90
|
|
82
91
|
shared_examples_for "rackspace" do
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
expect(@plugin[:rackspace]).not_to be_nil
|
92
|
+
it "creates rackspace" do
|
93
|
+
plugin.run
|
94
|
+
expect(plugin[:rackspace]).not_to be_nil
|
87
95
|
end
|
88
96
|
|
89
|
-
it "
|
90
|
-
|
91
|
-
expect(
|
92
|
-
expect(
|
93
|
-
expect(
|
94
|
-
expect(
|
95
|
-
expect(
|
96
|
-
expect(
|
97
|
-
expect(
|
98
|
-
expect(
|
97
|
+
it "has all required attributes" do
|
98
|
+
plugin.run
|
99
|
+
expect(plugin[:rackspace][:public_ip]).not_to be_nil
|
100
|
+
expect(plugin[:rackspace][:private_ip]).not_to be_nil
|
101
|
+
expect(plugin[:rackspace][:public_ipv4]).not_to be_nil
|
102
|
+
expect(plugin[:rackspace][:local_ipv4]).not_to be_nil
|
103
|
+
expect(plugin[:rackspace][:public_ipv6]).not_to be_nil
|
104
|
+
expect(plugin[:rackspace][:local_ipv6]).to be_nil
|
105
|
+
expect(plugin[:rackspace][:local_hostname]).not_to be_nil
|
106
|
+
expect(plugin[:rackspace][:public_hostname]).not_to be_nil
|
99
107
|
end
|
100
108
|
|
101
|
-
it "
|
109
|
+
it "resolves hostname if reverse dns is set" do
|
102
110
|
allow(Resolv).to receive(:getname).and_return("1234.resolved.com")
|
103
|
-
|
104
|
-
expect(
|
111
|
+
plugin.run
|
112
|
+
expect(plugin[:rackspace][:public_hostname]).to eq("1234.resolved.com")
|
105
113
|
end
|
106
114
|
|
107
115
|
[Resolv::ResolvError, Resolv::ResolvTimeout].each do |exception|
|
108
|
-
it "
|
116
|
+
it "returns ip address when reverse dns returns exception: #{exception}" do
|
109
117
|
allow(Resolv).to receive(:getname).and_raise(exception)
|
110
|
-
|
111
|
-
expect(
|
118
|
+
plugin.run
|
119
|
+
expect(plugin[:rackspace][:public_hostname]).to eq("1.2.3.4")
|
112
120
|
end
|
113
121
|
end
|
114
122
|
|
115
|
-
it "
|
116
|
-
|
117
|
-
expect(
|
118
|
-
expect(
|
119
|
-
expect(
|
120
|
-
expect(
|
121
|
-
expect(
|
122
|
-
expect(
|
123
|
-
expect(
|
123
|
+
it "has correct values for all attributes" do
|
124
|
+
plugin.run
|
125
|
+
expect(plugin[:rackspace][:public_ip]).to eq("1.2.3.4")
|
126
|
+
expect(plugin[:rackspace][:private_ip]).to eq("5.6.7.8")
|
127
|
+
expect(plugin[:rackspace][:public_ipv4]).to eq("1.2.3.4")
|
128
|
+
expect(plugin[:rackspace][:local_ipv4]).to eq("5.6.7.8")
|
129
|
+
expect(plugin[:rackspace][:public_ipv6]).to eq("2a00:1a48:7805:111:e875:efaf:ff08:75")
|
130
|
+
expect(plugin[:rackspace][:local_hostname]).to eq("katie")
|
131
|
+
expect(plugin[:rackspace][:public_hostname]).to eq("1.2.3.4")
|
124
132
|
end
|
125
133
|
|
126
|
-
it "
|
134
|
+
it "captures region information" do
|
127
135
|
provider_data = <<-OUT
|
128
136
|
provider = "Rackspace"
|
129
137
|
service_type = "cloudServers"
|
@@ -131,21 +139,53 @@ server_id = "21301000"
|
|
131
139
|
created_at = "2012-12-06T22:08:16Z"
|
132
140
|
region = "dfw"
|
133
141
|
OUT
|
134
|
-
allow(
|
135
|
-
|
136
|
-
expect(
|
142
|
+
allow(plugin).to receive(:shell_out).with("xenstore-ls vm-data/provider_data").and_return(mock_shell_out(0, provider_data, ""))
|
143
|
+
plugin.run
|
144
|
+
expect(plugin[:rackspace][:region]).to eq("dfw")
|
145
|
+
end
|
146
|
+
|
147
|
+
it "logs a debug message when region info cannot be collected" do
|
148
|
+
expect(plugin).
|
149
|
+
to receive(:shell_out).
|
150
|
+
with("xenstore-ls vm-data/provider_data").
|
151
|
+
and_raise(Ohai::Exceptions::Exec)
|
152
|
+
|
153
|
+
expect(Ohai::Log).
|
154
|
+
to receive(:debug).
|
155
|
+
with("rackspace plugin: Unable to find xenstore-ls, cannot capture " \
|
156
|
+
"region information for Rackspace cloud")
|
157
|
+
|
158
|
+
plugin.run
|
159
|
+
|
160
|
+
expect(plugin[:rackspace]).not_to have_key(:region)
|
137
161
|
end
|
138
162
|
|
139
|
-
it "
|
163
|
+
it "captures instance ID information" do
|
140
164
|
provider_data = "instance-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
141
|
-
allow(
|
142
|
-
|
143
|
-
expect(
|
165
|
+
allow(plugin).to receive(:shell_out).with("xenstore-read name").and_return(mock_shell_out(0, provider_data, ""))
|
166
|
+
plugin.run
|
167
|
+
expect(plugin[:rackspace][:instance_id]).to eq("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
|
168
|
+
end
|
169
|
+
|
170
|
+
it "logs error if instance id cannot be found" do
|
171
|
+
expect(plugin).
|
172
|
+
to receive(:shell_out).
|
173
|
+
with("xenstore-read name").
|
174
|
+
and_raise(Ohai::Exceptions::Exec)
|
175
|
+
|
176
|
+
expect(Ohai::Log).
|
177
|
+
to receive(:debug).
|
178
|
+
with("rackspace plugin: Unable to find xenstore-read, cannot capture " \
|
179
|
+
"instance ID information for Rackspace cloud")
|
180
|
+
|
181
|
+
plugin.run
|
182
|
+
|
183
|
+
expect(plugin[:rackspace]).not_to have_key(:instance_id)
|
144
184
|
end
|
145
185
|
end
|
146
186
|
|
147
187
|
describe "with rackspace cloud file" do
|
148
|
-
|
188
|
+
it_behaves_like "rackspace"
|
149
189
|
|
150
190
|
before(:each) do
|
151
191
|
allow(Resolv).to receive(:getname).and_raise(Resolv::ResolvError)
|
@@ -160,34 +200,34 @@ OUT
|
|
160
200
|
describe "with no public interfaces (empty eth0)" do
|
161
201
|
before do
|
162
202
|
# unset public (eth0) addresses
|
163
|
-
|
203
|
+
plugin[:network][:interfaces][:eth0]["addresses"] = {}
|
164
204
|
end
|
165
205
|
|
166
|
-
it "
|
167
|
-
|
206
|
+
it "has all required attributes" do
|
207
|
+
plugin.run
|
168
208
|
# expliticly nil
|
169
|
-
expect(
|
170
|
-
expect(
|
171
|
-
expect(
|
172
|
-
expect(
|
209
|
+
expect(plugin[:rackspace][:public_ip]).to be_nil
|
210
|
+
expect(plugin[:rackspace][:public_ipv4]).to be_nil
|
211
|
+
expect(plugin[:rackspace][:public_ipv6]).to be_nil
|
212
|
+
expect(plugin[:rackspace][:public_hostname]).to be_nil
|
173
213
|
# per normal
|
174
|
-
expect(
|
175
|
-
expect(
|
176
|
-
expect(
|
177
|
-
expect(
|
214
|
+
expect(plugin[:rackspace][:private_ip]).not_to be_nil
|
215
|
+
expect(plugin[:rackspace][:local_ipv4]).not_to be_nil
|
216
|
+
expect(plugin[:rackspace][:local_ipv6]).to be_nil
|
217
|
+
expect(plugin[:rackspace][:local_hostname]).not_to be_nil
|
178
218
|
end
|
179
219
|
|
180
|
-
it "
|
181
|
-
|
182
|
-
expect(
|
183
|
-
expect(
|
184
|
-
expect(
|
220
|
+
it "has correct values for all attributes" do
|
221
|
+
plugin.run
|
222
|
+
expect(plugin[:rackspace][:private_ip]).to eq("5.6.7.8")
|
223
|
+
expect(plugin[:rackspace][:local_ipv4]).to eq("5.6.7.8")
|
224
|
+
expect(plugin[:rackspace][:local_hostname]).to eq("katie")
|
185
225
|
end
|
186
226
|
end
|
187
227
|
end
|
188
228
|
|
189
229
|
describe "without cloud file" do
|
190
|
-
|
230
|
+
it_behaves_like "!rackspace"
|
191
231
|
|
192
232
|
before(:each) do
|
193
233
|
allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/rackspace.json").and_return(false)
|
@@ -196,7 +236,7 @@ OUT
|
|
196
236
|
end
|
197
237
|
|
198
238
|
describe "with ec2 cloud file" do
|
199
|
-
|
239
|
+
it_behaves_like "!rackspace"
|
200
240
|
|
201
241
|
before(:each) do
|
202
242
|
allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/ec2.json").and_return(true)
|
@@ -210,29 +250,60 @@ OUT
|
|
210
250
|
end
|
211
251
|
|
212
252
|
describe "xenstore provider returns rackspace" do
|
213
|
-
|
253
|
+
it_behaves_like "rackspace"
|
214
254
|
|
215
255
|
before(:each) do
|
216
256
|
stdout = "Rackspace\n"
|
217
|
-
allow(
|
257
|
+
allow(plugin).to receive(:shell_out).with("xenstore-read vm-data/provider_data/provider").and_return(mock_shell_out(0, stdout, "" ))
|
218
258
|
end
|
219
259
|
end
|
220
260
|
|
221
261
|
describe "xenstore provider does not return rackspace" do
|
222
|
-
|
262
|
+
it_behaves_like "!rackspace"
|
223
263
|
|
224
264
|
before(:each) do
|
225
265
|
stdout = "cumulonimbus\n"
|
226
|
-
allow(
|
266
|
+
allow(plugin).to receive(:shell_out).with("xenstore-read vm-data/provider_data/provider").and_return(mock_shell_out(0, stdout, "" ))
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
describe "xenstore provider does not exist" do
|
271
|
+
it_behaves_like "!rackspace"
|
272
|
+
|
273
|
+
before(:each) do
|
274
|
+
allow(plugin).
|
275
|
+
to receive(:shell_out).
|
276
|
+
with("xenstore-read vm-data/provider_data/provider").
|
277
|
+
and_raise(Ohai::Exceptions::Exec)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe "when private networks shell out fails" do
|
282
|
+
it "logs an error and does not collect private_networks" do
|
283
|
+
allow(plugin).to receive(:hint?).with("rackspace").and_return(true)
|
284
|
+
|
285
|
+
expect(plugin).
|
286
|
+
to receive(:shell_out).
|
287
|
+
with("xenstore-ls vm-data/networking").
|
288
|
+
and_raise(Ohai::Exceptions::Exec)
|
289
|
+
|
290
|
+
expect(Ohai::Log).
|
291
|
+
to receive(:debug).
|
292
|
+
with("rackspace plugin: Unable to capture custom private networking " \
|
293
|
+
"information for Rackspace cloud")
|
294
|
+
|
295
|
+
plugin.run
|
296
|
+
|
297
|
+
expect(plugin[:rackspace]).not_to have_key(:private_networks)
|
227
298
|
end
|
228
299
|
end
|
229
300
|
|
230
301
|
describe "does not have private networks" do
|
231
302
|
before do
|
232
303
|
stdout = 'BC764E20422B = "{"label": "public"}"\n'
|
233
|
-
allow(
|
304
|
+
allow(plugin).to receive(:shell_out).with("xenstore-ls vm-data/networking").and_return(mock_shell_out(0, stdout, "" ))
|
234
305
|
stdout = '{"label": "public", "broadcast": "9.10.11.255", "ips": [{"ip": "9.10.11.12", "netmask": "255.255.255.0", "enabled": "1", "gateway": null}], "mac": "BC:76:4E:20:42:2B", "dns": ["69.20.0.164", "69.20.0.196"], "gateway": null}'
|
235
|
-
allow(
|
306
|
+
allow(plugin).to receive(:shell_out).with("xenstore-read vm-data/networking/BC764E20422B").and_return(mock_shell_out(0, stdout, "" ))
|
236
307
|
|
237
308
|
allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/rackspace.json").and_return(true)
|
238
309
|
allow(File).to receive(:read).with("/etc/chef/ohai/hints/rackspace.json").and_return("")
|
@@ -240,33 +311,35 @@ OUT
|
|
240
311
|
allow(File).to receive(:read).with('C:\chef\ohai\hints/rackspace.json').and_return("")
|
241
312
|
end
|
242
313
|
|
243
|
-
it "
|
244
|
-
|
245
|
-
expect(
|
314
|
+
it "does not have private_networks object" do
|
315
|
+
plugin.run
|
316
|
+
expect(plugin[:rackspace][:private_networks]).to eq([])
|
246
317
|
end
|
247
318
|
end
|
248
319
|
|
249
320
|
describe "has private networks" do
|
250
321
|
before do
|
251
|
-
|
252
|
-
|
253
|
-
"
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
"
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
"
|
322
|
+
plugin[:network][:interfaces][:eth2] = {
|
323
|
+
:addresses => {
|
324
|
+
"fe80::be76:4eff:fe20:422b" => {
|
325
|
+
"scope" => "Link",
|
326
|
+
"prefixlen" => "64",
|
327
|
+
"family" => "inet6",
|
328
|
+
},
|
329
|
+
"9.10.11.12" => {
|
330
|
+
"broadcast" => "9.10.11.255",
|
331
|
+
"netmask" => "255.255.255.0",
|
332
|
+
"family" => "inet",
|
333
|
+
},
|
334
|
+
"BC:76:4E:20:42:2B" => {
|
335
|
+
"family" => "lladdr",
|
336
|
+
},
|
264
337
|
},
|
265
|
-
}
|
338
|
+
}
|
266
339
|
stdout = 'BC764E20422B = "{"label": "private-network"}"\n'
|
267
|
-
allow(
|
340
|
+
allow(plugin).to receive(:shell_out).with("xenstore-ls vm-data/networking").and_return(mock_shell_out(0, stdout, "" ))
|
268
341
|
stdout = '{"label": "private-network", "broadcast": "9.10.11.255", "ips": [{"ip": "9.10.11.12", "netmask": "255.255.255.0", "enabled": "1", "gateway": null}], "mac": "BC:76:4E:20:42:2B", "dns": ["69.20.0.164", "69.20.0.196"], "gateway": null}'
|
269
|
-
allow(
|
342
|
+
allow(plugin).to receive(:shell_out).with("xenstore-read vm-data/networking/BC764E20422B").and_return(mock_shell_out(0, stdout, "" ))
|
270
343
|
|
271
344
|
allow(File).to receive(:exist?).with("/etc/chef/ohai/hints/rackspace.json").and_return(true)
|
272
345
|
allow(File).to receive(:read).with("/etc/chef/ohai/hints/rackspace.json").and_return("")
|
@@ -274,16 +347,16 @@ OUT
|
|
274
347
|
allow(File).to receive(:read).with('C:\chef\ohai\hints/rackspace.json').and_return("")
|
275
348
|
end
|
276
349
|
|
277
|
-
it "
|
278
|
-
|
279
|
-
expect(
|
350
|
+
it "has private_networks object" do
|
351
|
+
plugin.run
|
352
|
+
expect(plugin[:rackspace][:private_networks]).not_to be_nil
|
280
353
|
end
|
281
354
|
|
282
|
-
it "
|
283
|
-
|
284
|
-
expect(
|
285
|
-
expect(
|
286
|
-
expect(
|
355
|
+
it "has correct values for all attributes" do
|
356
|
+
plugin.run
|
357
|
+
expect(plugin[:rackspace][:private_networks][0][:label]).to eq("private-network")
|
358
|
+
expect(plugin[:rackspace][:private_networks][0][:broadcast]).to eq("9.10.11.255")
|
359
|
+
expect(plugin[:rackspace][:private_networks][0][:mac]).to eq("BC:76:4E:20:42:2B")
|
287
360
|
end
|
288
361
|
|
289
362
|
end
|