ohai 6.24.0.rc.0 → 6.24.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 +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
|