oxidized 0.19.0 → 0.20.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/Dockerfile +17 -2
  4. data/Gemfile +0 -1
  5. data/Gemfile.lock +10 -9
  6. data/README.md +205 -10
  7. data/extra/auto-reload-config.runit +1 -1
  8. data/extra/oxidized.init +3 -3
  9. data/extra/update-ca-certificates.runit +7 -0
  10. data/lib/oxidized/config.rb +4 -2
  11. data/lib/oxidized/config/vars.rb +5 -1
  12. data/lib/oxidized/hook/exec.rb +1 -0
  13. data/lib/oxidized/hook/slackdiff.rb +34 -0
  14. data/lib/oxidized/input/ssh.rb +4 -1
  15. data/lib/oxidized/model/aireos.rb +1 -1
  16. data/lib/oxidized/model/airos.rb +9 -4
  17. data/lib/oxidized/model/alvarion.rb +3 -1
  18. data/lib/oxidized/model/aosw.rb +22 -6
  19. data/lib/oxidized/model/asa.rb +3 -2
  20. data/lib/oxidized/model/cisconga.rb +19 -0
  21. data/lib/oxidized/model/comware.rb +6 -0
  22. data/lib/oxidized/model/cumulus.rb +15 -3
  23. data/lib/oxidized/model/fabricos.rb +2 -1
  24. data/lib/oxidized/model/fiberdriver.rb +4 -0
  25. data/lib/oxidized/model/firewareos.rb +7 -1
  26. data/lib/oxidized/model/fortios.rb +15 -4
  27. data/lib/oxidized/model/ios.rb +83 -8
  28. data/lib/oxidized/model/ironware.rb +5 -6
  29. data/lib/oxidized/model/junos.rb +3 -0
  30. data/lib/oxidized/model/mlnxos.rb +5 -1
  31. data/lib/oxidized/model/netgear.rb +32 -0
  32. data/lib/oxidized/model/nxos.rb +14 -1
  33. data/lib/oxidized/model/oneos.rb +58 -0
  34. data/lib/oxidized/model/opengear.rb +2 -0
  35. data/lib/oxidized/model/pfsense.rb +3 -2
  36. data/lib/oxidized/model/powerconnect.rb +1 -0
  37. data/lib/oxidized/model/procurve.rb +8 -3
  38. data/lib/oxidized/model/quantaos.rb +1 -1
  39. data/lib/oxidized/model/routeros.rb +8 -0
  40. data/lib/oxidized/model/saos.rb +3 -1
  41. data/lib/oxidized/model/siklu.rb +19 -0
  42. data/lib/oxidized/model/timos.rb +16 -0
  43. data/lib/oxidized/model/tplink.rb +65 -0
  44. data/lib/oxidized/model/voltaire.rb +56 -0
  45. data/lib/oxidized/model/voss.rb +33 -0
  46. data/lib/oxidized/model/zhoneolt.rb +52 -0
  47. data/lib/oxidized/node.rb +39 -10
  48. data/lib/oxidized/nodes.rb +2 -1
  49. data/lib/oxidized/output/gitcrypt.rb +244 -0
  50. data/lib/oxidized/source/csv.rb +10 -1
  51. data/lib/oxidized/source/http.rb +24 -7
  52. data/lib/oxidized/version.rb +1 -1
  53. data/lib/oxidized/worker.rb +3 -2
  54. data/oxidized.gemspec +2 -1
  55. metadata +29 -4
@@ -11,14 +11,23 @@ class CSV < Source
11
11
  Oxidized.asetus.user.source.csv.delimiter = /:/
12
12
  Oxidized.asetus.user.source.csv.map.name = 0
13
13
  Oxidized.asetus.user.source.csv.map.model = 1
14
+ Oxidized.asetus.user.source.csv.gpg = false
14
15
  Oxidized.asetus.save :user
15
16
  raise NoConfig, 'no source csv config, edit ~/.config/oxidized/config'
16
17
  end
18
+ require 'gpgme' if @cfg.gpg?
17
19
  end
18
20
 
19
21
  def load
20
22
  nodes = []
21
- open(File.expand_path @cfg.file).each_line do |line|
23
+ file = File.expand_path(@cfg.file)
24
+ file = if @cfg.gpg?
25
+ crypto = GPGME::Crypto.new password: @cfg.gpg_password
26
+ crypto.decrypt(file).to_s
27
+ else
28
+ open(file)
29
+ end
30
+ file.each_line do |line|
22
31
  next if line.match(/^\s*#/)
23
32
  data = line.chomp.split(@cfg.delimiter, -1)
24
33
  next if data.empty?
@@ -29,25 +29,27 @@ class HTTP < Source
29
29
  end
30
30
 
31
31
  request = Net::HTTP::Get.new(uri.request_uri, headers)
32
- if (@cfg.user && @cfg.pass)
32
+ if (@cfg.user? && @cfg.pass?)
33
33
  request.basic_auth(@cfg.user,@cfg.pass)
34
34
  end
35
35
 
36
36
  response = http.request(request)
37
37
  data = JSON.parse(response.body)
38
- data.each do |line|
39
- next if line.empty?
38
+ data.each do |node|
39
+ next if node.empty?
40
40
  # map node parameters
41
41
  keys = {}
42
- @cfg.map.each do |key, position|
43
- keys[key.to_sym] = node_var_interpolate line[position]
42
+ @cfg.map.each do |key, want_position|
43
+ want_positions = want_position.split('.')
44
+ keys[key.to_sym] = node_var_interpolate node.dig(*want_positions)
44
45
  end
45
46
  keys[:model] = map_model keys[:model] if keys.key? :model
46
47
 
47
48
  # map node specific vars
48
49
  vars = {}
49
- @cfg.vars_map.each do |key, position|
50
- vars[key.to_sym] = node_var_interpolate line[position]
50
+ @cfg.vars_map.each do |key, want_position|
51
+ want_positions = want_position.split('.')
52
+ vars[key.to_sym] = node_var_interpolate node.dig(*want_positions)
51
53
  end
52
54
  keys[:vars] = vars unless vars.empty?
53
55
 
@@ -58,3 +60,18 @@ class HTTP < Source
58
60
 
59
61
  end
60
62
  end
63
+
64
+ if RUBY_VERSION < '2.3'
65
+ class Hash
66
+ def dig(key, *rest)
67
+ value = self[key]
68
+ if value.nil? || rest.empty?
69
+ value
70
+ elsif value.respond_to?(:dig)
71
+ value.dig(*rest)
72
+ else # foo.bar.baz (bar exist but is not hash)
73
+ return nil
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,3 +1,3 @@
1
1
  module Oxidized
2
- VERSION = '0.19.0'
2
+ VERSION = '0.20.0'
3
3
  end
@@ -3,8 +3,9 @@ module Oxidized
3
3
  require 'oxidized/jobs'
4
4
  class Worker
5
5
  def initialize nodes
6
- @nodes = nodes
7
- @jobs = Jobs.new(Oxidized.config.threads, Oxidized.config.interval, @nodes)
6
+ @nodes = nodes
7
+ @jobs = Jobs.new(Oxidized.config.threads, Oxidized.config.interval, @nodes)
8
+ @nodes.jobs = @jobs
8
9
  Thread.abort_on_exception = true
9
10
  end
10
11
 
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_runtime_dependency 'rugged', '~> 0.21', '>= 0.21.4'
26
26
 
27
27
  if defined?(RUBY_VERSION) && RUBY_VERSION > '2.3'
28
- s.add_runtime_dependency 'net-telnet'
28
+ s.add_runtime_dependency 'net-telnet', '~> 0'
29
29
  end
30
30
 
31
31
  s.add_development_dependency 'pry', '~> 0'
@@ -33,4 +33,5 @@ Gem::Specification.new do |s|
33
33
  s.add_development_dependency 'rake', '~> 10.0'
34
34
  s.add_development_dependency 'minitest', '~> 5.8'
35
35
  s.add_development_dependency 'mocha', '~> 1.1'
36
+ s.add_development_dependency 'git', '~> 1'
36
37
  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.19.0
4
+ version: 0.20.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: 2016-12-12 00:00:00.000000000 Z
13
+ date: 2017-05-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: asetus
@@ -78,14 +78,14 @@ dependencies:
78
78
  name: net-telnet
79
79
  requirement: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ">="
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  type: :runtime
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ">="
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  - !ruby/object:Gem::Dependency
@@ -158,6 +158,20 @@ dependencies:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
160
  version: '1.1'
161
+ - !ruby/object:Gem::Dependency
162
+ name: git
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '1'
161
175
  description: software to fetch configuration from network devices and store them
162
176
  email:
163
177
  - saku@ytti.fi
@@ -194,6 +208,7 @@ files:
194
208
  - extra/rest_client.rb
195
209
  - extra/rvm.oxidized.upstart
196
210
  - extra/syslog.rb
211
+ - extra/update-ca-certificates.runit
197
212
  - lib/oxidized.rb
198
213
  - lib/oxidized/cli.rb
199
214
  - lib/oxidized/config.rb
@@ -204,6 +219,7 @@ files:
204
219
  - lib/oxidized/hook/exec.rb
205
220
  - lib/oxidized/hook/githubrepo.rb
206
221
  - lib/oxidized/hook/noophook.rb
222
+ - lib/oxidized/hook/slackdiff.rb
207
223
  - lib/oxidized/input/cli.rb
208
224
  - lib/oxidized/input/ftp.rb
209
225
  - lib/oxidized/input/input.rb
@@ -226,6 +242,7 @@ files:
226
242
  - lib/oxidized/model/c4cmts.rb
227
243
  - lib/oxidized/model/casa.rb
228
244
  - lib/oxidized/model/catos.rb
245
+ - lib/oxidized/model/cisconga.rb
229
246
  - lib/oxidized/model/ciscosmb.rb
230
247
  - lib/oxidized/model/comware.rb
231
248
  - lib/oxidized/model/coriant8600.rb
@@ -256,10 +273,12 @@ files:
256
273
  - lib/oxidized/model/mlnxos.rb
257
274
  - lib/oxidized/model/model.rb
258
275
  - lib/oxidized/model/mtrlrfs.rb
276
+ - lib/oxidized/model/netgear.rb
259
277
  - lib/oxidized/model/netonix.rb
260
278
  - lib/oxidized/model/netscaler.rb
261
279
  - lib/oxidized/model/nos.rb
262
280
  - lib/oxidized/model/nxos.rb
281
+ - lib/oxidized/model/oneos.rb
263
282
  - lib/oxidized/model/opengear.rb
264
283
  - lib/oxidized/model/outputs.rb
265
284
  - lib/oxidized/model/panos.rb
@@ -271,19 +290,25 @@ files:
271
290
  - lib/oxidized/model/routeros.rb
272
291
  - lib/oxidized/model/saos.rb
273
292
  - lib/oxidized/model/screenos.rb
293
+ - lib/oxidized/model/siklu.rb
274
294
  - lib/oxidized/model/supermicro.rb
275
295
  - lib/oxidized/model/timos.rb
276
296
  - lib/oxidized/model/tmos.rb
297
+ - lib/oxidized/model/tplink.rb
277
298
  - lib/oxidized/model/trango.rb
299
+ - lib/oxidized/model/voltaire.rb
300
+ - lib/oxidized/model/voss.rb
278
301
  - lib/oxidized/model/vrp.rb
279
302
  - lib/oxidized/model/vyatta.rb
280
303
  - lib/oxidized/model/xos.rb
304
+ - lib/oxidized/model/zhoneolt.rb
281
305
  - lib/oxidized/model/zynos.rb
282
306
  - lib/oxidized/node.rb
283
307
  - lib/oxidized/node/stats.rb
284
308
  - lib/oxidized/nodes.rb
285
309
  - lib/oxidized/output/file.rb
286
310
  - lib/oxidized/output/git.rb
311
+ - lib/oxidized/output/gitcrypt.rb
287
312
  - lib/oxidized/output/http.rb
288
313
  - lib/oxidized/output/output.rb
289
314
  - lib/oxidized/source/csv.rb