oxidized 0.25.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +30 -9
  3. data/.rubocop_todo.yml +16 -637
  4. data/.travis.yml +2 -3
  5. data/CHANGELOG.md +14 -0
  6. data/Dockerfile +7 -5
  7. data/README.md +18 -14
  8. data/Rakefile +2 -2
  9. data/bin/console +1 -1
  10. data/bin/oxidized +2 -2
  11. data/docs/Configuration.md +6 -0
  12. data/docs/Model-Notes/README.md +1 -0
  13. data/docs/Model-Notes/SmartAX-Huawei.md +35 -0
  14. data/docs/Supported-OS-Types.md +12 -0
  15. data/extra/nagios_check_failing_nodes.rb +1 -1
  16. data/extra/rest_client.rb +6 -8
  17. data/extra/syslog.rb +33 -33
  18. data/lib/oxidized/cli.rb +25 -26
  19. data/lib/oxidized/config.rb +9 -9
  20. data/lib/oxidized/config/vars.rb +3 -7
  21. data/lib/oxidized/core.rb +4 -7
  22. data/lib/oxidized/hook.rb +16 -17
  23. data/lib/oxidized/hook/awssns.rb +4 -4
  24. data/lib/oxidized/hook/exec.rb +16 -20
  25. data/lib/oxidized/hook/githubrepo.rb +8 -14
  26. data/lib/oxidized/hook/noophook.rb +1 -1
  27. data/lib/oxidized/hook/xmppdiff.rb +1 -1
  28. data/lib/oxidized/input/cli.rb +12 -12
  29. data/lib/oxidized/input/ftp.rb +8 -8
  30. data/lib/oxidized/input/http.rb +37 -14
  31. data/lib/oxidized/input/input.rb +6 -6
  32. data/lib/oxidized/input/ssh.rb +31 -31
  33. data/lib/oxidized/input/telnet.rb +24 -24
  34. data/lib/oxidized/input/tftp.rb +9 -10
  35. data/lib/oxidized/jobs.rb +7 -7
  36. data/lib/oxidized/manager.rb +13 -13
  37. data/lib/oxidized/model/acos.rb +2 -2
  38. data/lib/oxidized/model/aireos.rb +3 -3
  39. data/lib/oxidized/model/aos7.rb +1 -1
  40. data/lib/oxidized/model/aosw.rb +12 -14
  41. data/lib/oxidized/model/apc_aos.rb +1 -1
  42. data/lib/oxidized/model/aricentiss.rb +6 -8
  43. data/lib/oxidized/model/asa.rb +1 -1
  44. data/lib/oxidized/model/audiocodesmp.rb +28 -0
  45. data/lib/oxidized/model/awplus.rb +9 -9
  46. data/lib/oxidized/model/boss.rb +1 -1
  47. data/lib/oxidized/model/ciscosmb.rb +1 -1
  48. data/lib/oxidized/model/ciscovpn3k.rb +11 -0
  49. data/lib/oxidized/model/comware.rb +1 -1
  50. data/lib/oxidized/model/cumulus.rb +3 -1
  51. data/lib/oxidized/model/dellx.rb +5 -5
  52. data/lib/oxidized/model/edgeos.rb +1 -1
  53. data/lib/oxidized/model/edgeswitch.rb +1 -1
  54. data/lib/oxidized/model/fabricos.rb +1 -1
  55. data/lib/oxidized/model/fortios.rb +5 -5
  56. data/lib/oxidized/model/ftos.rb +1 -1
  57. data/lib/oxidized/model/gcombnps.rb +7 -7
  58. data/lib/oxidized/model/grandstream.rb +9 -0
  59. data/lib/oxidized/model/hatteras.rb +8 -8
  60. data/lib/oxidized/model/ios.rb +22 -40
  61. data/lib/oxidized/model/ironware.rb +1 -1
  62. data/lib/oxidized/model/junos.rb +1 -1
  63. data/lib/oxidized/model/mlnxos.rb +1 -1
  64. data/lib/oxidized/model/model.rb +32 -38
  65. data/lib/oxidized/model/netgearxs716.rb +23 -0
  66. data/lib/oxidized/model/netonix.rb +1 -1
  67. data/lib/oxidized/model/netscaler.rb +1 -1
  68. data/lib/oxidized/model/nos.rb +2 -2
  69. data/lib/oxidized/model/nxos.rb +1 -1
  70. data/lib/oxidized/model/openbsd.rb +3 -2
  71. data/lib/oxidized/model/outputs.rb +4 -4
  72. data/lib/oxidized/model/planet.rb +4 -4
  73. data/lib/oxidized/model/powerconnect.rb +8 -8
  74. data/lib/oxidized/model/procurve.rb +2 -1
  75. data/lib/oxidized/model/quantaos.rb +3 -3
  76. data/lib/oxidized/model/raisecom.rb +19 -0
  77. data/lib/oxidized/model/siklu.rb +1 -1
  78. data/lib/oxidized/model/slxos.rb +1 -1
  79. data/lib/oxidized/model/smartax.rb +25 -0
  80. data/lib/oxidized/model/sros.rb +4 -4
  81. data/lib/oxidized/model/tdre.rb +30 -0
  82. data/lib/oxidized/model/tmos.rb +3 -0
  83. data/lib/oxidized/model/trango.rb +17 -37
  84. data/lib/oxidized/model/voltaire.rb +1 -1
  85. data/lib/oxidized/model/voss.rb +1 -1
  86. data/lib/oxidized/model/vyatta.rb +1 -1
  87. data/lib/oxidized/model/xos.rb +1 -1
  88. data/lib/oxidized/model/zhoneolt.rb +1 -1
  89. data/lib/oxidized/node.rb +42 -46
  90. data/lib/oxidized/node/stats.rb +6 -6
  91. data/lib/oxidized/nodes.rb +42 -42
  92. data/lib/oxidized/output/file.rb +16 -20
  93. data/lib/oxidized/output/git.rb +68 -78
  94. data/lib/oxidized/output/gitcrypt.rb +77 -91
  95. data/lib/oxidized/output/http.rb +17 -19
  96. data/lib/oxidized/output/output.rb +1 -1
  97. data/lib/oxidized/source/csv.rb +3 -3
  98. data/lib/oxidized/source/http.rb +11 -14
  99. data/lib/oxidized/source/source.rb +3 -3
  100. data/lib/oxidized/source/sql.rb +16 -18
  101. data/lib/oxidized/string.rb +10 -10
  102. data/lib/oxidized/version.rb +4 -4
  103. data/lib/oxidized/worker.rb +15 -15
  104. data/oxidized.gemspec +6 -9
  105. metadata +32 -25
@@ -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 lines = 1
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 lines = 1
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 head = 1, tail = 1
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 command
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 str = ''
27
+ def initialize(str = '')
28
28
  super
29
- if str.class == Oxidized::String
30
- @cmd = str.cmd
31
- @name = str.name
32
- @type = str.type
33
- end
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
@@ -1,6 +1,6 @@
1
1
  module Oxidized
2
- VERSION = '0.25.1'
3
- VERSION_FULL = '0.25.1'
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
@@ -2,7 +2,7 @@ module Oxidized
2
2
  require 'oxidized/job'
3
3
  require 'oxidized/jobs'
4
4
  class Worker
5
- def initialize nodes
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 if not job.alive? }
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 == 0 ? Time.now.utc + 10 : nextnode.last.end
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 is_cycle_finished?
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 job
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 node, job
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: 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: node,
70
- job: 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 node, job
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, :node => node,
91
- :job => 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 is_cycle_finished?
96
+ def cycle_finished?
97
97
  if @jobs_done > @nodes.count
98
98
  true
99
99
  else
100
- @jobs_done > 0 && @jobs_done % @nodes.count == 0
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
@@ -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.0.0'
20
+ s.required_ruby_version = '>= 2.3'
21
21
  s.add_runtime_dependency 'asetus', '~> 0.1'
22
- s.add_runtime_dependency 'net-ssh', '~> 4.1.0'
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 'simplecov'
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.57.1'
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.25.1
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: 2018-12-18 00:00:00.000000000 Z
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: 4.1.0
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: 4.1.0
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: '1.10'
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: '1.10'
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.57.1
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.57.1
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.0.0
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
- rubyforge_project: oxidized
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