oxidized 0.25.1 → 0.26.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.
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