oxidized 0.19.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
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