ohai 6.24.0.rc.0 → 6.24.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ohai/plugins/linux/filesystem.rb +51 -10
- data/lib/ohai/plugins/linux/network.rb +13 -4
- data/lib/ohai/version.rb +1 -1
- data/spec/unit/plugins/linux/filesystem_spec.rb +136 -18
- data/spec/unit/plugins/linux/network_spec.rb +5 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea95d6137035fa5e4065985fda8ee793152bfb70
|
4
|
+
data.tar.gz: b8f8ebc64d0d228542eca403be15715dae942e51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a2bd36af0e8368ec8dcf6e95ef9833e546a956ba84c839c711ad8708a790468d3d3782f428e1ed58f662e48a4e5a4cee0d068f90332af71311f1c40ea088c23
|
7
|
+
data.tar.gz: cb3ec503e6c4fd6ec4d8aecaf338d5c3a1d2bcfc1b44bb98fd1eb8316dcc8579f739abd5dc8aad82fc53175c9627ebf49ed74046370a8344e23bd69d6b26a5b0
|
@@ -52,11 +52,21 @@ stdout.each_line do |line|
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
have_lsblk = File.exists?('/bin/lsblk')
|
56
|
+
|
57
|
+
# Gather more filesystem types via libuuid/libblkid even devices that
|
58
|
+
# aren't mounted
|
59
|
+
if have_lsblk
|
60
|
+
cmd = 'lsblk -r -o NAME,FSTYPE -n'
|
61
|
+
regex = /^(\S+) (\S+)/
|
62
|
+
else
|
63
|
+
cmd = 'blkid -s TYPE'
|
64
|
+
regex = /^(\S+): TYPE="(\S+)"/
|
65
|
+
end
|
66
|
+
popen4(cmd) do |pid, stdin, stdout, stderr|
|
57
67
|
stdin.close
|
58
68
|
stdout.each do |line|
|
59
|
-
if line =~
|
69
|
+
if line =~ regex
|
60
70
|
filesystem = $1
|
61
71
|
fs[filesystem] = Mash.new unless fs.has_key?(filesystem)
|
62
72
|
fs[filesystem][:fs_type] = $2
|
@@ -64,11 +74,18 @@ popen4("blkid -s TYPE") do |pid, stdin, stdout, stderr|
|
|
64
74
|
end
|
65
75
|
end
|
66
76
|
|
67
|
-
|
68
|
-
|
77
|
+
if have_lsblk
|
78
|
+
cmd = 'lsblk -r -o NAME,UUID -n'
|
79
|
+
regex = /^(\S+) (\S+)/
|
80
|
+
else
|
81
|
+
cmd = 'blkid -s UUID'
|
82
|
+
regex = /^(\S+): UUID="(\S+)"/
|
83
|
+
end
|
84
|
+
|
85
|
+
popen4(cmd) do |pid, stdin, stdout, stderr|
|
69
86
|
stdin.close
|
70
87
|
stdout.each do |line|
|
71
|
-
if line =~
|
88
|
+
if line =~ regex
|
72
89
|
filesystem = $1
|
73
90
|
fs[filesystem] = Mash.new unless fs.has_key?(filesystem)
|
74
91
|
fs[filesystem][:uuid] = $2
|
@@ -76,11 +93,18 @@ popen4("blkid -s UUID") do |pid, stdin, stdout, stderr|
|
|
76
93
|
end
|
77
94
|
end
|
78
95
|
|
79
|
-
|
80
|
-
|
96
|
+
if have_lsblk
|
97
|
+
cmd = 'lsblk -r -o NAME,LABEL -n'
|
98
|
+
regex = /^(\S+) (\S+)/
|
99
|
+
else
|
100
|
+
cmd = 'blkid -s LABEL'
|
101
|
+
regex = /^(\S+): LABEL="(\S+)"/
|
102
|
+
end
|
103
|
+
|
104
|
+
popen4(cmd) do |pid, stdin, stdout, stderr|
|
81
105
|
stdin.close
|
82
106
|
stdout.each do |line|
|
83
|
-
if line =~
|
107
|
+
if line =~ regex
|
84
108
|
filesystem = $1
|
85
109
|
fs[filesystem] = Mash.new unless fs.has_key?(filesystem)
|
86
110
|
fs[filesystem][:label] = $2
|
@@ -90,7 +114,24 @@ end
|
|
90
114
|
|
91
115
|
# Grab any missing mount information from /proc/mounts
|
92
116
|
if File.exists?('/proc/mounts')
|
93
|
-
|
117
|
+
mounts = ''
|
118
|
+
# Due to https://tickets.opscode.com/browse/OHAI-196
|
119
|
+
# we have to non-block read dev files. Ew.
|
120
|
+
f = File.open('/proc/mounts')
|
121
|
+
loop do
|
122
|
+
begin
|
123
|
+
data = f.read_nonblock(4096)
|
124
|
+
mounts << data
|
125
|
+
# We should just catch EOFError, but the kernel had a period of
|
126
|
+
# bugginess with reading virtual files, so we're being extra
|
127
|
+
# cautious here, catching all exceptions, and then we'll read
|
128
|
+
# whatever data we might have
|
129
|
+
rescue Exception
|
130
|
+
break
|
131
|
+
end
|
132
|
+
end
|
133
|
+
f.close
|
134
|
+
mounts.each_line do |line|
|
94
135
|
if line =~ /^(\S+) (\S+) (\S+) (\S+) \S+ \S+$/
|
95
136
|
filesystem = $1
|
96
137
|
next if fs.has_key?(filesystem)
|
@@ -201,13 +201,22 @@ if File.exist?("/sbin/ip")
|
|
201
201
|
# the routing table source field.
|
202
202
|
# 3) and since we're at it, let's populate some :routes attributes
|
203
203
|
# (going to do that for both inet and inet6 addresses)
|
204
|
-
popen4("ip -f #{family[:name]} route show") do |pid, stdin, stdout, stderr|
|
204
|
+
popen4("ip -o -f #{family[:name]} route show") do |pid, stdin, stdout, stderr|
|
205
205
|
stdin.close
|
206
206
|
stdout.each do |line|
|
207
|
-
|
207
|
+
line.strip!
|
208
|
+
Ohai::Log.debug("Parsing #{line}")
|
209
|
+
if line =~ /\\/
|
210
|
+
parts = line.split('\\')
|
211
|
+
route_dest = parts.shift.strip
|
212
|
+
route_endings = parts
|
213
|
+
elsif line =~ /^([^\s]+)\s(.*)$/
|
208
214
|
route_dest = $1
|
209
|
-
|
210
|
-
|
215
|
+
route_endings = [$2]
|
216
|
+
else
|
217
|
+
next
|
218
|
+
end
|
219
|
+
route_endings.each do |route_ending|
|
211
220
|
if route_ending =~ /\bdev\s+([^\s]+)\b/
|
212
221
|
route_int = $1
|
213
222
|
else
|
data/lib/ohai/version.rb
CHANGED
@@ -42,10 +42,15 @@ describe Ohai::System, "Linux filesystem plugin" do
|
|
42
42
|
|
43
43
|
@ohai.stub!(:run_command).with(@df_cmd).and_return([0,stdout,stderr])
|
44
44
|
@ohai.stub!(:run_command).with(@mount_cmd).and_return([0,stdout,stderr])
|
45
|
+
File.stub!(:exists?).with("/bin/lsblk").and_return(false)
|
45
46
|
@ohai.stub!(:popen4).with("blkid -s TYPE").and_return(false)
|
46
47
|
@ohai.stub!(:popen4).with("blkid -s UUID").and_return(false)
|
47
48
|
@ohai.stub!(:popen4).with("blkid -s LABEL").and_return(false)
|
48
49
|
|
50
|
+
@ohai.stub!(:popen4).with("lsblk -r -o NAME,FSTYPE -n").and_return(false)
|
51
|
+
@ohai.stub!(:popen4).with("lsblk -r -o NAME,UUID -n").and_return(false)
|
52
|
+
@ohai.stub!(:popen4).with("lsblk -r -o NAME,LABEL -n").and_return(false)
|
53
|
+
|
49
54
|
File.stub!(:exists?).with("/proc/mounts").and_return(false)
|
50
55
|
end
|
51
56
|
|
@@ -192,6 +197,37 @@ describe Ohai::System, "Linux filesystem plugin" do
|
|
192
197
|
end
|
193
198
|
end
|
194
199
|
|
200
|
+
describe "when gathering filesystem type data from lsblk" do
|
201
|
+
before(:each) do
|
202
|
+
File.stub!(:exists?).with('/bin/lsblk').and_return(true)
|
203
|
+
@stdin = mock("STDIN", { :close => true })
|
204
|
+
@pid = 10
|
205
|
+
@stderr = mock("STDERR")
|
206
|
+
@stdout = mock("STDOUT")
|
207
|
+
@status = 0
|
208
|
+
|
209
|
+
@stdout.stub!(:each).
|
210
|
+
and_yield("/dev/sdb1 linux_raid_member").
|
211
|
+
and_yield("/dev/sdb2 linux_raid_member").
|
212
|
+
and_yield("/dev/sda1 linux_raid_member").
|
213
|
+
and_yield("/dev/sda2 linux_raid_member").
|
214
|
+
and_yield("/dev/md0 ext3").
|
215
|
+
and_yield("/dev/md1 LVM2_member").
|
216
|
+
and_yield("/dev/mapper/sys.vg-root.lv ext4").
|
217
|
+
and_yield("/dev/mapper/sys.vg-swap.lv swap").
|
218
|
+
and_yield("/dev/mapper/sys.vg-tmp.lv ext4").
|
219
|
+
and_yield("/dev/mapper/sys.vg-usr.lv ext4").
|
220
|
+
and_yield("/dev/mapper/sys.vg-var.lv ext4").
|
221
|
+
and_yield("/dev/mapper/sys.vg-home.lv xfs")
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should run lsblk -r -o NAME,FSTYPE -n" do
|
225
|
+
@ohai.should_receive(:popen4).with("lsblk -r -o NAME,FSTYPE -n").
|
226
|
+
and_return(true)
|
227
|
+
@ohai._require_plugin("linux::filesystem")
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
195
231
|
describe "when gathering filesystem uuid data from blkid" do
|
196
232
|
before(:each) do
|
197
233
|
@stdin = mock("STDIN", { :close => true })
|
@@ -227,6 +263,44 @@ describe Ohai::System, "Linux filesystem plugin" do
|
|
227
263
|
end
|
228
264
|
end
|
229
265
|
|
266
|
+
describe "when gathering filesystem uuid data from lsblk" do
|
267
|
+
before(:each) do
|
268
|
+
File.stub!(:exists?).with('/bin/lsblk').and_return(true)
|
269
|
+
@stdin = mock("STDIN", { :close => true })
|
270
|
+
@pid = 10
|
271
|
+
@stderr = mock("STDERR")
|
272
|
+
@stdout = mock("STDOUT")
|
273
|
+
@status = 0
|
274
|
+
|
275
|
+
@stdout.stub!(:each).
|
276
|
+
and_yield("/dev/sdb1 bd1197e0-6997-1f3a-e27e-7801388308b5").
|
277
|
+
and_yield("/dev/sdb2 e36d933e-e5b9-cfe5-6845-1f84d0f7fbfa").
|
278
|
+
and_yield("/dev/sda1 bd1197e0-6997-1f3a-e27e-7801388308b5").
|
279
|
+
and_yield("/dev/sda2 e36d933e-e5b9-cfe5-6845-1f84d0f7fbfa").
|
280
|
+
and_yield("/dev/md0 37b8de8e-0fe3-4b5a-b9b4-dde33e19bb32").
|
281
|
+
and_yield("/dev/md1 YsIe0R-fj1y-LXTd-imla-opKo-OuIe-TBoxSK").
|
282
|
+
and_yield("/dev/mapper/sys.vg-root.lv 7742d14b-80a3-4e97-9a32-478be9ea9aea").
|
283
|
+
and_yield("/dev/mapper/sys.vg-swap.lv 9bc2e515-8ddc-41c3-9f63-4eaebde9ce96").
|
284
|
+
and_yield("/dev/mapper/sys.vg-tmp.lv 74cf7eb9-428f-479e-9a4a-9943401e81e5").
|
285
|
+
and_yield("/dev/mapper/sys.vg-usr.lv 26ec33c5-d00b-4f88-a550-492def013bbc").
|
286
|
+
and_yield("/dev/mapper/sys.vg-var.lv 6b559c35-7847-4ae2-b512-c99012d3f5b3").
|
287
|
+
and_yield("/dev/mapper/sys.vg-home.lv d6efda02-1b73-453c-8c74-7d8dee78fa5e")
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should run lsblk -r -o NAME,UUID -n" do
|
291
|
+
@ohai.should_receive(:popen4).with("lsblk -r -o NAME,UUID -n").
|
292
|
+
and_return(true)
|
293
|
+
@ohai._require_plugin("linux::filesystem")
|
294
|
+
end
|
295
|
+
|
296
|
+
it "should set kb_size to value from lsblk -r -o NAME,UUID -n" do
|
297
|
+
@ohai.stub!(:popen4).with("lsblk -r -o NAME,UUID -n").
|
298
|
+
and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
299
|
+
@ohai._require_plugin("linux::filesystem")
|
300
|
+
@ohai[:filesystem]["/dev/sda2"][:uuid].should be == "e36d933e-e5b9-cfe5-6845-1f84d0f7fbfa"
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
230
304
|
describe "when gathering filesystem label data from blkid" do
|
231
305
|
before(:each) do
|
232
306
|
@stdin = mock("STDIN", { :close => true })
|
@@ -260,28 +334,73 @@ describe Ohai::System, "Linux filesystem plugin" do
|
|
260
334
|
end
|
261
335
|
end
|
262
336
|
|
337
|
+
describe "when gathering filesystem label data from lsblk" do
|
338
|
+
before(:each) do
|
339
|
+
File.stub!(:exists?).with('/bin/lsblk').and_return(true)
|
340
|
+
@stdin = mock("STDIN", { :close => true })
|
341
|
+
@pid = 10
|
342
|
+
@stderr = mock("STDERR")
|
343
|
+
@stdout = mock("STDOUT")
|
344
|
+
@status = 0
|
345
|
+
|
346
|
+
@stdout.stub!(:each).
|
347
|
+
and_yield("/dev/sda1 fuego:0").
|
348
|
+
and_yield("/dev/sda2 fuego:1").
|
349
|
+
and_yield("/dev/sdb1 fuego:0").
|
350
|
+
and_yield("/dev/sdb2 fuego:1").
|
351
|
+
and_yield("/dev/md0 /boot").
|
352
|
+
and_yield("/dev/mapper/sys.vg-root.lv /").
|
353
|
+
and_yield("/dev/mapper/sys.vg-tmp.lv /tmp").
|
354
|
+
and_yield("/dev/mapper/sys.vg-usr.lv /usr").
|
355
|
+
and_yield("/dev/mapper/sys.vg-var.lv /var").
|
356
|
+
and_yield("/dev/mapper/sys.vg-home.lv /home")
|
357
|
+
end
|
358
|
+
|
359
|
+
it "should run lsblk -r -o NAME,LABEL -n" do
|
360
|
+
@ohai.should_receive(:popen4).with("lsblk -r -o NAME,LABEL -n").
|
361
|
+
and_return(true)
|
362
|
+
@ohai._require_plugin("linux::filesystem")
|
363
|
+
end
|
364
|
+
|
365
|
+
it "should set kb_size to value from lsblk -r -o NAME,LABEL -n" do
|
366
|
+
@ohai.stub!(:popen4).with("lsblk -r -o NAME,LABEL -n").
|
367
|
+
and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
368
|
+
@ohai._require_plugin("linux::filesystem")
|
369
|
+
@ohai[:filesystem]["/dev/md0"][:label].should be == "/boot"
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
|
263
374
|
describe "when gathering data from /proc/mounts" do
|
264
375
|
before(:each) do
|
265
376
|
File.stub!(:exists?).with("/proc/mounts").and_return(true)
|
266
377
|
@mock_file = mock("/proc/mounts")
|
267
378
|
@mock_file.stub!(:read_nonblock).and_return(@mock_file)
|
268
|
-
@
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
379
|
+
@mounts = <<-MOUNTS
|
380
|
+
rootfs / rootfs rw 0 0
|
381
|
+
none /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
|
382
|
+
none /proc proc rw,nosuid,nodev,noexec,relatime 0 0
|
383
|
+
none /dev devtmpfs rw,relatime,size=2025576k,nr_inodes=506394,mode=755 0 0
|
384
|
+
none /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
|
385
|
+
/dev/mapper/sys.vg-root.lv / ext4 rw,noatime,errors=remount-ro,barrier=1,data=ordered 0 0
|
386
|
+
tmpfs /lib/init/rw tmpfs rw,nosuid,relatime,mode=755 0 0
|
387
|
+
tmpfs /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0
|
388
|
+
/dev/mapper/sys.vg-home.lv /home xfs rw,noatime,attr2,noquota 0 0
|
389
|
+
/dev/mapper/sys.vg-special.lv /special xfs ro,noatime,attr2,noquota 0 0
|
390
|
+
/dev/mapper/sys.vg-tmp.lv /tmp ext4 rw,noatime,barrier=1,data=ordered 0 0
|
391
|
+
/dev/mapper/sys.vg-usr.lv /usr ext4 rw,noatime,barrier=1,data=ordered 0 0
|
392
|
+
/dev/mapper/sys.vg-var.lv /var ext4 rw,noatime,barrier=1,data=ordered 0 0
|
393
|
+
/dev/md0 /boot ext3 rw,noatime,errors=remount-ro,data=ordered 0 0
|
394
|
+
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
|
395
|
+
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
|
396
|
+
MOUNTS
|
397
|
+
@counter = 0
|
398
|
+
@mock_file.stub(:read_nonblock) do
|
399
|
+
@counter += 1
|
400
|
+
raise EOFError if @counter == 2
|
401
|
+
@mounts
|
402
|
+
end
|
403
|
+
@mock_file.stub(:close)
|
285
404
|
File.stub!(:open).with("/proc/mounts").and_return(@mock_file)
|
286
405
|
end
|
287
406
|
|
@@ -300,5 +419,4 @@ describe Ohai::System, "Linux filesystem plugin" do
|
|
300
419
|
@ohai[:filesystem]["/dev/mapper/sys.vg-special.lv"][:mount_options].should be == [ "ro", "noatime", "attr2", "noquota" ]
|
301
420
|
end
|
302
421
|
end
|
303
|
-
|
304
422
|
end
|
@@ -45,8 +45,8 @@ def do_stubs
|
|
45
45
|
@ohai.stub!(:popen4).with("ip -f inet6 neigh show").and_yield(nil, @stdin_ipneighbor_inet6, @ipneighbor_lines_inet6, nil)
|
46
46
|
@ohai.stub!(:popen4).with("ip addr").and_yield(nil, @stdin_ipaddr, @ipaddr_lines, nil)
|
47
47
|
@ohai.stub!(:popen4).with("ip -d -s link").and_yield(nil, @stdin_iplink, @iplink_lines, nil)
|
48
|
-
@ohai.stub!(:popen4).with("ip -f inet route show").and_yield(nil, @stdin_ip_route, @ip_route_lines, nil)
|
49
|
-
@ohai.stub!(:popen4).with("ip -f inet6 route show").and_yield(nil, @stdin_ip_route_inet6, @ip_route_inet6_lines, nil)
|
48
|
+
@ohai.stub!(:popen4).with("ip -o -f inet route show").and_yield(nil, @stdin_ip_route, @ip_route_lines, nil)
|
49
|
+
@ohai.stub!(:popen4).with("ip -o -f inet6 route show").and_yield(nil, @stdin_ip_route_inet6, @ip_route_inet6_lines, nil)
|
50
50
|
end
|
51
51
|
|
52
52
|
describe Ohai::System, "Linux Network Plugin" do
|
@@ -256,6 +256,7 @@ NEIGHBOR_SHOW
|
|
256
256
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
257
257
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
258
258
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
259
|
+
10.5.4.0/24 \\ nexthop via 10.5.4.1 dev eth0 weight 1\\ nexthop via 10.5.4.2 dev eth0 weight 1
|
259
260
|
default via 10.116.201.1 dev eth0
|
260
261
|
IP_ROUTE_SCOPE
|
261
262
|
|
@@ -584,6 +585,8 @@ ROUTE_N
|
|
584
585
|
it "adds routes" do
|
585
586
|
@ohai._require_plugin("linux::network")
|
586
587
|
@ohai['network']['interfaces']['eth0']['routes'].should include Mash.new( :destination => "10.116.201.0/24", :proto => "kernel", :family =>"inet" )
|
588
|
+
@ohai['network']['interfaces']['eth0']['routes'].should include Mash.new( :destination => "10.5.4.0/24", :family =>"inet", :via => "10.5.4.1")
|
589
|
+
@ohai['network']['interfaces']['eth0']['routes'].should include Mash.new( :destination => "10.5.4.0/24", :family =>"inet", :via => "10.5.4.2")
|
587
590
|
@ohai['network']['interfaces']['foo:veth0@eth0']['routes'].should include Mash.new( :destination => "192.168.212.0/24", :proto => "kernel", :src => "192.168.212.2", :family =>"inet" )
|
588
591
|
@ohai['network']['interfaces']['eth0']['routes'].should include Mash.new( :destination => "fe80::/64", :metric => "256", :proto => "kernel", :family => "inet6" )
|
589
592
|
@ohai['network']['interfaces']['eth0.11']['routes'].should include Mash.new( :destination => "1111:2222:3333:4444::/64", :metric => "1024", :family => "inet6" )
|
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: 6.24.0
|
4
|
+
version: 6.24.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: 2014-
|
11
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: systemu
|
@@ -430,9 +430,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
430
430
|
version: '0'
|
431
431
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
432
432
|
requirements:
|
433
|
-
- - "
|
433
|
+
- - ">="
|
434
434
|
- !ruby/object:Gem::Version
|
435
|
-
version:
|
435
|
+
version: '0'
|
436
436
|
requirements: []
|
437
437
|
rubyforge_project:
|
438
438
|
rubygems_version: 2.2.2
|