oxidized 0.25.1 → 0.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +30 -9
- data/.rubocop_todo.yml +16 -637
- data/.travis.yml +2 -3
- data/CHANGELOG.md +14 -0
- data/Dockerfile +7 -5
- data/README.md +18 -14
- data/Rakefile +2 -2
- data/bin/console +1 -1
- data/bin/oxidized +2 -2
- data/docs/Configuration.md +6 -0
- data/docs/Model-Notes/README.md +1 -0
- data/docs/Model-Notes/SmartAX-Huawei.md +35 -0
- data/docs/Supported-OS-Types.md +12 -0
- data/extra/nagios_check_failing_nodes.rb +1 -1
- data/extra/rest_client.rb +6 -8
- data/extra/syslog.rb +33 -33
- data/lib/oxidized/cli.rb +25 -26
- data/lib/oxidized/config.rb +9 -9
- data/lib/oxidized/config/vars.rb +3 -7
- data/lib/oxidized/core.rb +4 -7
- data/lib/oxidized/hook.rb +16 -17
- data/lib/oxidized/hook/awssns.rb +4 -4
- data/lib/oxidized/hook/exec.rb +16 -20
- data/lib/oxidized/hook/githubrepo.rb +8 -14
- data/lib/oxidized/hook/noophook.rb +1 -1
- data/lib/oxidized/hook/xmppdiff.rb +1 -1
- data/lib/oxidized/input/cli.rb +12 -12
- data/lib/oxidized/input/ftp.rb +8 -8
- data/lib/oxidized/input/http.rb +37 -14
- data/lib/oxidized/input/input.rb +6 -6
- data/lib/oxidized/input/ssh.rb +31 -31
- data/lib/oxidized/input/telnet.rb +24 -24
- data/lib/oxidized/input/tftp.rb +9 -10
- data/lib/oxidized/jobs.rb +7 -7
- data/lib/oxidized/manager.rb +13 -13
- data/lib/oxidized/model/acos.rb +2 -2
- data/lib/oxidized/model/aireos.rb +3 -3
- data/lib/oxidized/model/aos7.rb +1 -1
- data/lib/oxidized/model/aosw.rb +12 -14
- data/lib/oxidized/model/apc_aos.rb +1 -1
- data/lib/oxidized/model/aricentiss.rb +6 -8
- data/lib/oxidized/model/asa.rb +1 -1
- data/lib/oxidized/model/audiocodesmp.rb +28 -0
- data/lib/oxidized/model/awplus.rb +9 -9
- data/lib/oxidized/model/boss.rb +1 -1
- data/lib/oxidized/model/ciscosmb.rb +1 -1
- data/lib/oxidized/model/ciscovpn3k.rb +11 -0
- data/lib/oxidized/model/comware.rb +1 -1
- data/lib/oxidized/model/cumulus.rb +3 -1
- data/lib/oxidized/model/dellx.rb +5 -5
- data/lib/oxidized/model/edgeos.rb +1 -1
- data/lib/oxidized/model/edgeswitch.rb +1 -1
- data/lib/oxidized/model/fabricos.rb +1 -1
- data/lib/oxidized/model/fortios.rb +5 -5
- data/lib/oxidized/model/ftos.rb +1 -1
- data/lib/oxidized/model/gcombnps.rb +7 -7
- data/lib/oxidized/model/grandstream.rb +9 -0
- data/lib/oxidized/model/hatteras.rb +8 -8
- data/lib/oxidized/model/ios.rb +22 -40
- data/lib/oxidized/model/ironware.rb +1 -1
- data/lib/oxidized/model/junos.rb +1 -1
- data/lib/oxidized/model/mlnxos.rb +1 -1
- data/lib/oxidized/model/model.rb +32 -38
- data/lib/oxidized/model/netgearxs716.rb +23 -0
- data/lib/oxidized/model/netonix.rb +1 -1
- data/lib/oxidized/model/netscaler.rb +1 -1
- data/lib/oxidized/model/nos.rb +2 -2
- data/lib/oxidized/model/nxos.rb +1 -1
- data/lib/oxidized/model/openbsd.rb +3 -2
- data/lib/oxidized/model/outputs.rb +4 -4
- data/lib/oxidized/model/planet.rb +4 -4
- data/lib/oxidized/model/powerconnect.rb +8 -8
- data/lib/oxidized/model/procurve.rb +2 -1
- data/lib/oxidized/model/quantaos.rb +3 -3
- data/lib/oxidized/model/raisecom.rb +19 -0
- data/lib/oxidized/model/siklu.rb +1 -1
- data/lib/oxidized/model/slxos.rb +1 -1
- data/lib/oxidized/model/smartax.rb +25 -0
- data/lib/oxidized/model/sros.rb +4 -4
- data/lib/oxidized/model/tdre.rb +30 -0
- data/lib/oxidized/model/tmos.rb +3 -0
- data/lib/oxidized/model/trango.rb +17 -37
- data/lib/oxidized/model/voltaire.rb +1 -1
- data/lib/oxidized/model/voss.rb +1 -1
- data/lib/oxidized/model/vyatta.rb +1 -1
- data/lib/oxidized/model/xos.rb +1 -1
- data/lib/oxidized/model/zhoneolt.rb +1 -1
- data/lib/oxidized/node.rb +42 -46
- data/lib/oxidized/node/stats.rb +6 -6
- data/lib/oxidized/nodes.rb +42 -42
- data/lib/oxidized/output/file.rb +16 -20
- data/lib/oxidized/output/git.rb +68 -78
- data/lib/oxidized/output/gitcrypt.rb +77 -91
- data/lib/oxidized/output/http.rb +17 -19
- data/lib/oxidized/output/output.rb +1 -1
- data/lib/oxidized/source/csv.rb +3 -3
- data/lib/oxidized/source/http.rb +11 -14
- data/lib/oxidized/source/source.rb +3 -3
- data/lib/oxidized/source/sql.rb +16 -18
- data/lib/oxidized/string.rb +10 -10
- data/lib/oxidized/version.rb +4 -4
- data/lib/oxidized/worker.rb +15 -15
- data/oxidized.gemspec +6 -9
- metadata +32 -25
data/lib/oxidized/string.rb
CHANGED
@@ -4,33 +4,33 @@ module Oxidized
|
|
4
4
|
attr_accessor :type, :cmd, :name
|
5
5
|
|
6
6
|
# @return [Oxidized::String] copy of self with last line removed
|
7
|
-
def cut_tail
|
7
|
+
def cut_tail(lines = 1)
|
8
8
|
Oxidized::String.new each_line.to_a[0..-1 - lines].join
|
9
9
|
end
|
10
10
|
|
11
11
|
# @return [Oxidized::String] copy of self with first line removed
|
12
|
-
def cut_head
|
12
|
+
def cut_head(lines = 1)
|
13
13
|
Oxidized::String.new each_line.to_a[lines..-1].join
|
14
14
|
end
|
15
15
|
|
16
16
|
# @return [Oxidized::String] copy of self with first and last lines removed
|
17
|
-
def cut_both
|
17
|
+
def cut_both(head = 1, tail = 1)
|
18
18
|
Oxidized::String.new each_line.to_a[head..-1 - tail].join
|
19
19
|
end
|
20
20
|
|
21
21
|
# sets @cmd and @name unless @name is already set
|
22
|
-
def set_cmd
|
22
|
+
def set_cmd(command)
|
23
23
|
@cmd = command
|
24
24
|
@name ||= @cmd.to_s.strip.gsub(/\s+/, '_') # what to do when command is proc? #to_s seems ghetto
|
25
25
|
end
|
26
26
|
|
27
|
-
def initialize
|
27
|
+
def initialize(str = '')
|
28
28
|
super
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
return unless str.class == Oxidized::String
|
30
|
+
|
31
|
+
@cmd = str.cmd
|
32
|
+
@name = str.name
|
33
|
+
@type = str.type
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
data/lib/oxidized/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Oxidized
|
2
|
-
VERSION = '0.
|
3
|
-
VERSION_FULL = '0.
|
2
|
+
VERSION = '0.26.0'.freeze
|
3
|
+
VERSION_FULL = '0.26.0'.freeze
|
4
4
|
def self.version_set
|
5
5
|
version_full = %x(git describe --tags).chop rescue ""
|
6
6
|
version = %x(git describe --tags --abbrev=0).chop rescue ""
|
@@ -12,8 +12,8 @@ module Oxidized
|
|
12
12
|
const_set(:VERSION, version)
|
13
13
|
const_set(:VERSION_FULL, version_full)
|
14
14
|
file = File.readlines(__FILE__)
|
15
|
-
file[1] = " VERSION = '%s'\n" % VERSION
|
16
|
-
file[2] = " VERSION_FULL = '%s'\n" % VERSION_FULL
|
15
|
+
file[1] = " VERSION = '%s'.freeze\n" % VERSION
|
16
|
+
file[2] = " VERSION_FULL = '%s'.freeze\n" % VERSION_FULL
|
17
17
|
File.write(__FILE__, file.join)
|
18
18
|
end
|
19
19
|
end
|
data/lib/oxidized/worker.rb
CHANGED
@@ -2,7 +2,7 @@ module Oxidized
|
|
2
2
|
require 'oxidized/job'
|
3
3
|
require 'oxidized/jobs'
|
4
4
|
class Worker
|
5
|
-
def initialize
|
5
|
+
def initialize(nodes)
|
6
6
|
@jobs_done = 0
|
7
7
|
@nodes = nodes
|
8
8
|
@jobs = Jobs.new(Oxidized.config.threads, Oxidized.config.interval, @nodes)
|
@@ -12,7 +12,7 @@ module Oxidized
|
|
12
12
|
|
13
13
|
def work
|
14
14
|
ended = []
|
15
|
-
@jobs.delete_if { |job| ended << job
|
15
|
+
@jobs.delete_if { |job| ended << job unless job.alive? }
|
16
16
|
ended.each { |job| process job }
|
17
17
|
@jobs.work
|
18
18
|
|
@@ -22,7 +22,7 @@ module Oxidized
|
|
22
22
|
nextnode = @nodes.first
|
23
23
|
unless nextnode.last.nil?
|
24
24
|
# Set unobtainable value for 'last' if interval checking is disabled
|
25
|
-
last = Oxidized.config.interval
|
25
|
+
last = Oxidized.config.interval.zero? ? Time.now.utc + 10 : nextnode.last.end
|
26
26
|
break if last + Oxidized.config.interval > Time.now.utc
|
27
27
|
end
|
28
28
|
# shift nodes and get the next node
|
@@ -33,11 +33,11 @@ module Oxidized
|
|
33
33
|
Oxidized.logger.debug "lib/oxidized/worker.rb: Added #{node.group}/#{node.name} to the job queue"
|
34
34
|
end
|
35
35
|
|
36
|
-
run_done_hook if
|
36
|
+
run_done_hook if cycle_finished?
|
37
37
|
Oxidized.logger.debug("lib/oxidized/worker.rb: #{@jobs.size} jobs running in parallel") unless @jobs.empty?
|
38
38
|
end
|
39
39
|
|
40
|
-
def process
|
40
|
+
def process(job)
|
41
41
|
node = job.node
|
42
42
|
node.last = job
|
43
43
|
node.stats.add job
|
@@ -54,10 +54,10 @@ module Oxidized
|
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
|
-
def process_success
|
57
|
+
def process_success(node, job)
|
58
58
|
@jobs_done += 1 # needed for :nodes_done hook
|
59
59
|
Oxidized.Hooks.handle :node_success, node: node,
|
60
|
-
job:
|
60
|
+
job: job
|
61
61
|
msg = "update #{node.group}/#{node.name}"
|
62
62
|
msg += " from #{node.from}" if node.from
|
63
63
|
msg += " with message '#{node.msg}'" if node.msg
|
@@ -66,14 +66,14 @@ module Oxidized
|
|
66
66
|
msg: msg, email: node.email, user: node.user, group: node.group
|
67
67
|
node.modified
|
68
68
|
Oxidized.logger.info "Configuration updated for #{node.group}/#{node.name}"
|
69
|
-
Oxidized.Hooks.handle :post_store, node:
|
70
|
-
job:
|
69
|
+
Oxidized.Hooks.handle :post_store, node: node,
|
70
|
+
job: job,
|
71
71
|
commitref: output.commitref
|
72
72
|
end
|
73
73
|
node.reset
|
74
74
|
end
|
75
75
|
|
76
|
-
def process_failure
|
76
|
+
def process_failure(node, job)
|
77
77
|
msg = "#{node.group}/#{node.name} status #{job.status}"
|
78
78
|
if node.retry < Oxidized.config.retries
|
79
79
|
node.retry += 1
|
@@ -87,24 +87,24 @@ module Oxidized
|
|
87
87
|
@jobs_done += 1
|
88
88
|
msg += ", retries exhausted, giving up"
|
89
89
|
node.retry = 0
|
90
|
-
Oxidized.Hooks.handle :node_fail, :
|
91
|
-
:job
|
90
|
+
Oxidized.Hooks.handle :node_fail, node: node,
|
91
|
+
job: job
|
92
92
|
end
|
93
93
|
Oxidized.logger.warn msg
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def cycle_finished?
|
97
97
|
if @jobs_done > @nodes.count
|
98
98
|
true
|
99
99
|
else
|
100
|
-
@jobs_done
|
100
|
+
@jobs_done.positive? && (@jobs_done % @nodes.count).zero?
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
104
|
def run_done_hook
|
105
105
|
Oxidized.logger.debug "lib/oxidized/worker.rb: Running :nodes_done hook"
|
106
106
|
Oxidized.Hooks.handle :nodes_done
|
107
|
-
rescue => e
|
107
|
+
rescue StandardError => e
|
108
108
|
# swallow the hook erros and continue as normal
|
109
109
|
Oxidized.logger.error "lib/oxidized/worker.rb: #{e.message}"
|
110
110
|
ensure
|
data/oxidized.gemspec
CHANGED
@@ -17,23 +17,20 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = %w[oxidized]
|
18
18
|
s.require_path = 'lib'
|
19
19
|
|
20
|
-
s.required_ruby_version = '>= 2.
|
20
|
+
s.required_ruby_version = '>= 2.3'
|
21
21
|
s.add_runtime_dependency 'asetus', '~> 0.1'
|
22
|
-
s.add_runtime_dependency 'net-ssh', '~>
|
22
|
+
s.add_runtime_dependency 'net-ssh', '~> 5'
|
23
23
|
s.add_runtime_dependency 'net-telnet', '~> 0.1.1'
|
24
24
|
s.add_runtime_dependency 'rugged', '~> 0.21', '>= 0.21.4'
|
25
25
|
s.add_runtime_dependency 'slop', '~> 3.5'
|
26
26
|
|
27
|
-
s.add_development_dependency '
|
28
|
-
if ENV['CI'] == 'true'
|
29
|
-
s.add_development_dependency 'codecov'
|
30
|
-
end
|
31
|
-
|
32
|
-
s.add_development_dependency 'bundler', '~> 1.10'
|
27
|
+
s.add_development_dependency 'bundler', '~> 2.0'
|
28
|
+
s.add_development_dependency 'codecov' if ENV['CI'] == 'true'
|
33
29
|
s.add_development_dependency 'git', '~> 1'
|
34
30
|
s.add_development_dependency 'minitest', '~> 5.8'
|
35
31
|
s.add_development_dependency 'mocha', '~> 1.1'
|
36
32
|
s.add_development_dependency 'pry', '~> 0'
|
37
33
|
s.add_development_dependency 'rake', '~> 10.0'
|
38
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
34
|
+
s.add_development_dependency 'rubocop', '~> 0.65.0'
|
35
|
+
s.add_development_dependency 'simplecov'
|
39
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxidized
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-03-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: asetus
|
@@ -32,14 +32,14 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: '5'
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: '5'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: net-telnet
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,34 +88,20 @@ dependencies:
|
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '3.5'
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: simplecov
|
93
|
-
requirement: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
|
-
type: :development
|
99
|
-
prerelease: false
|
100
|
-
version_requirements: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
91
|
- !ruby/object:Gem::Dependency
|
106
92
|
name: bundler
|
107
93
|
requirement: !ruby/object:Gem::Requirement
|
108
94
|
requirements:
|
109
95
|
- - "~>"
|
110
96
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
97
|
+
version: '2.0'
|
112
98
|
type: :development
|
113
99
|
prerelease: false
|
114
100
|
version_requirements: !ruby/object:Gem::Requirement
|
115
101
|
requirements:
|
116
102
|
- - "~>"
|
117
103
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
104
|
+
version: '2.0'
|
119
105
|
- !ruby/object:Gem::Dependency
|
120
106
|
name: git
|
121
107
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,14 +178,28 @@ dependencies:
|
|
192
178
|
requirements:
|
193
179
|
- - "~>"
|
194
180
|
- !ruby/object:Gem::Version
|
195
|
-
version: 0.
|
181
|
+
version: 0.65.0
|
196
182
|
type: :development
|
197
183
|
prerelease: false
|
198
184
|
version_requirements: !ruby/object:Gem::Requirement
|
199
185
|
requirements:
|
200
186
|
- - "~>"
|
201
187
|
- !ruby/object:Gem::Version
|
202
|
-
version: 0.
|
188
|
+
version: 0.65.0
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: simplecov
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
type: :development
|
197
|
+
prerelease: false
|
198
|
+
version_requirements: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
203
|
description: software to fetch configuration from network devices and store them
|
204
204
|
email:
|
205
205
|
- saku@ytti.fi
|
@@ -238,6 +238,7 @@ files:
|
|
238
238
|
- docs/Model-Notes/Netgear.md
|
239
239
|
- docs/Model-Notes/Nokia.md
|
240
240
|
- docs/Model-Notes/README.md
|
241
|
+
- docs/Model-Notes/SmartAX-Huawei.md
|
241
242
|
- docs/Model-Notes/VRP-Huawei.md
|
242
243
|
- docs/Model-Notes/Viptela.md
|
243
244
|
- docs/Model-Notes/XGS4600-Zyxel.md
|
@@ -302,6 +303,7 @@ files:
|
|
302
303
|
- lib/oxidized/model/asa.rb
|
303
304
|
- lib/oxidized/model/asyncos.rb
|
304
305
|
- lib/oxidized/model/audiocodes.rb
|
306
|
+
- lib/oxidized/model/audiocodesmp.rb
|
305
307
|
- lib/oxidized/model/awplus.rb
|
306
308
|
- lib/oxidized/model/axos.rb
|
307
309
|
- lib/oxidized/model/boss.rb
|
@@ -313,6 +315,7 @@ files:
|
|
313
315
|
- lib/oxidized/model/cisconga.rb
|
314
316
|
- lib/oxidized/model/ciscosma.rb
|
315
317
|
- lib/oxidized/model/ciscosmb.rb
|
318
|
+
- lib/oxidized/model/ciscovpn3k.rb
|
316
319
|
- lib/oxidized/model/comnetms.rb
|
317
320
|
- lib/oxidized/model/comtrol.rb
|
318
321
|
- lib/oxidized/model/comware.rb
|
@@ -340,6 +343,7 @@ files:
|
|
340
343
|
- lib/oxidized/model/fujitsupy.rb
|
341
344
|
- lib/oxidized/model/gaiaos.rb
|
342
345
|
- lib/oxidized/model/gcombnps.rb
|
346
|
+
- lib/oxidized/model/grandstream.rb
|
343
347
|
- lib/oxidized/model/hatteras.rb
|
344
348
|
- lib/oxidized/model/hirschmann.rb
|
345
349
|
- lib/oxidized/model/hpebladesystem.rb
|
@@ -357,6 +361,7 @@ files:
|
|
357
361
|
- lib/oxidized/model/mtrlrfs.rb
|
358
362
|
- lib/oxidized/model/ndms.rb
|
359
363
|
- lib/oxidized/model/netgear.rb
|
364
|
+
- lib/oxidized/model/netgearxs716.rb
|
360
365
|
- lib/oxidized/model/netonix.rb
|
361
366
|
- lib/oxidized/model/netscaler.rb
|
362
367
|
- lib/oxidized/model/nos.rb
|
@@ -373,15 +378,18 @@ files:
|
|
373
378
|
- lib/oxidized/model/powerconnect.rb
|
374
379
|
- lib/oxidized/model/procurve.rb
|
375
380
|
- lib/oxidized/model/quantaos.rb
|
381
|
+
- lib/oxidized/model/raisecom.rb
|
376
382
|
- lib/oxidized/model/routeros.rb
|
377
383
|
- lib/oxidized/model/saos.rb
|
378
384
|
- lib/oxidized/model/screenos.rb
|
379
385
|
- lib/oxidized/model/sgos.rb
|
380
386
|
- lib/oxidized/model/siklu.rb
|
381
387
|
- lib/oxidized/model/slxos.rb
|
388
|
+
- lib/oxidized/model/smartax.rb
|
382
389
|
- lib/oxidized/model/sros.rb
|
383
390
|
- lib/oxidized/model/stoneos.rb
|
384
391
|
- lib/oxidized/model/supermicro.rb
|
392
|
+
- lib/oxidized/model/tdre.rb
|
385
393
|
- lib/oxidized/model/timos.rb
|
386
394
|
- lib/oxidized/model/tmos.rb
|
387
395
|
- lib/oxidized/model/tplink.rb
|
@@ -425,15 +433,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
425
433
|
requirements:
|
426
434
|
- - ">="
|
427
435
|
- !ruby/object:Gem::Version
|
428
|
-
version: 2.
|
436
|
+
version: '2.3'
|
429
437
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
430
438
|
requirements:
|
431
439
|
- - ">="
|
432
440
|
- !ruby/object:Gem::Version
|
433
441
|
version: '0'
|
434
442
|
requirements: []
|
435
|
-
|
436
|
-
rubygems_version: 2.7.6
|
443
|
+
rubygems_version: 3.0.2
|
437
444
|
signing_key:
|
438
445
|
specification_version: 4
|
439
446
|
summary: feeble attempt at rancid
|