oxidized 0.21.0 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/no-response.yml +13 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +37 -0
- data/.rubocop_todo.yml +714 -0
- data/.travis.yml +7 -1
- data/CHANGELOG.md +341 -243
- data/Dockerfile +44 -16
- data/LICENSE +201 -0
- data/README.md +114 -82
- data/Rakefile +19 -0
- data/TODO.md +29 -23
- data/bin/oxidized +1 -2
- data/docs/Configuration.md +71 -31
- data/docs/Creating-Models.md +78 -0
- data/docs/Hooks.md +145 -41
- data/docs/Model-Notes/AireOS.md +12 -0
- data/docs/Model-Notes/ArbOS.md +12 -0
- data/docs/Model-Notes/Comware.md +14 -0
- data/docs/Model-Notes/EOS.md +9 -0
- data/docs/Model-Notes/JunOS.md +34 -0
- data/docs/Model-Notes/Netgear.md +68 -0
- data/docs/Model-Notes/README.md +19 -0
- data/docs/{VRP-Huawei.md → Model-Notes/VRP-Huawei.md} +10 -2
- data/docs/Model-Notes/XGS4600-Zyxel.md +39 -0
- data/docs/Outputs.md +27 -28
- data/docs/Ruby-API.md +38 -18
- data/docs/Sources.md +78 -16
- data/docs/Supported-OS-Types.md +171 -148
- data/extra/oxidized.logrotate +7 -0
- data/extra/oxidized.service +1 -1
- data/extra/rest_client.rb +4 -5
- data/extra/syslog.rb +16 -16
- data/lib/oxidized/cli.rb +3 -3
- data/lib/oxidized/config.rb +7 -4
- data/lib/oxidized/core.rb +3 -3
- data/lib/oxidized/hook.rb +64 -65
- data/lib/oxidized/hook/awssns.rb +2 -3
- data/lib/oxidized/hook/ciscosparkdiff.rb +49 -0
- data/lib/oxidized/hook/exec.rb +5 -5
- data/lib/oxidized/hook/githubrepo.rb +20 -14
- data/lib/oxidized/hook/slackdiff.rb +38 -19
- data/lib/oxidized/hook/xmppdiff.rb +58 -0
- data/lib/oxidized/input/cli.rb +5 -6
- data/lib/oxidized/input/ftp.rb +8 -7
- data/lib/oxidized/input/http.rb +39 -0
- data/lib/oxidized/input/ssh.rb +24 -22
- data/lib/oxidized/input/telnet.rb +38 -32
- data/lib/oxidized/jobs.rb +3 -4
- data/lib/oxidized/manager.rb +9 -4
- data/lib/oxidized/model/acos.rb +15 -16
- data/lib/oxidized/model/acsw.rb +3 -8
- data/lib/oxidized/model/aen.rb +1 -2
- data/lib/oxidized/model/aireos.rb +3 -5
- data/lib/oxidized/model/alteonos.rb +16 -18
- data/lib/oxidized/model/alvarion.rb +0 -4
- data/lib/oxidized/model/aos.rb +2 -4
- data/lib/oxidized/model/aos7.rb +2 -3
- data/lib/oxidized/model/aosw.rb +13 -15
- data/lib/oxidized/model/apc_aos.rb +0 -3
- data/lib/oxidized/model/arbos.rb +26 -0
- data/lib/oxidized/model/aricentiss.rb +51 -0
- data/lib/oxidized/model/asa.rb +33 -35
- data/lib/oxidized/model/asyncos.rb +41 -44
- data/lib/oxidized/model/audiocodes.rb +4 -8
- data/lib/oxidized/model/awplus.rb +84 -0
- data/lib/oxidized/model/boss.rb +6 -5
- data/lib/oxidized/model/br6910.rb +43 -45
- data/lib/oxidized/model/c4cmts.rb +3 -5
- data/lib/oxidized/model/cambium.rb +22 -0
- data/lib/oxidized/model/catos.rb +0 -2
- data/lib/oxidized/model/cisconga.rb +1 -3
- data/lib/oxidized/model/ciscosma.rb +37 -40
- data/lib/oxidized/model/ciscosmb.rb +7 -4
- data/lib/oxidized/model/comnetms.rb +43 -0
- data/lib/oxidized/model/comware.rb +9 -9
- data/lib/oxidized/model/coriant8600.rb +3 -5
- data/lib/oxidized/model/coriantgroove.rb +3 -5
- data/lib/oxidized/model/corianttmos.rb +1 -3
- data/lib/oxidized/model/cumulus.rb +26 -32
- data/lib/oxidized/model/datacom.rb +0 -2
- data/lib/oxidized/model/dcnos.rb +46 -0
- data/lib/oxidized/model/dlink.rb +1 -1
- data/lib/oxidized/model/dnos.rb +9 -5
- data/lib/oxidized/model/edgecos.rb +45 -0
- data/lib/oxidized/model/edgeos.rb +5 -3
- data/lib/oxidized/model/edgeswitch.rb +1 -3
- data/lib/oxidized/model/enterasys.rb +1 -3
- data/lib/oxidized/model/eos.rb +6 -8
- data/lib/oxidized/model/fabricos.rb +3 -5
- data/lib/oxidized/model/firewareos.rb +2 -5
- data/lib/oxidized/model/fortios.rb +21 -17
- data/lib/oxidized/model/ftos.rb +2 -4
- data/lib/oxidized/model/fujitsupy.rb +2 -4
- data/lib/oxidized/model/gaiaos.rb +6 -10
- data/lib/oxidized/model/gcombnps.rb +82 -0
- data/lib/oxidized/model/hatteras.rb +8 -5
- data/lib/oxidized/model/hirschmann.rb +8 -10
- data/lib/oxidized/model/hpebladesystem.rb +19 -17
- data/lib/oxidized/model/hpemsa.rb +0 -3
- data/lib/oxidized/model/ios.rb +54 -55
- data/lib/oxidized/model/iosxe.rb +5 -0
- data/lib/oxidized/model/iosxr.rb +1 -3
- data/lib/oxidized/model/ipos.rb +1 -3
- data/lib/oxidized/model/ironware.rb +12 -15
- data/lib/oxidized/model/isam.rb +4 -5
- data/lib/oxidized/model/junos.rb +8 -7
- data/lib/oxidized/model/masteros.rb +1 -3
- data/lib/oxidized/model/mlnxos.rb +3 -4
- data/lib/oxidized/model/model.rb +15 -7
- data/lib/oxidized/model/mtrlrfs.rb +1 -4
- data/lib/oxidized/model/ndms.rb +24 -0
- data/lib/oxidized/model/netgear.rb +3 -4
- data/lib/oxidized/model/netscaler.rb +0 -2
- data/lib/oxidized/model/nos.rb +1 -3
- data/lib/oxidized/model/nxos.rb +13 -3
- data/lib/oxidized/model/oneos.rb +6 -8
- data/lib/oxidized/model/openbsd.rb +76 -0
- data/lib/oxidized/model/opengear.rb +3 -5
- data/lib/oxidized/model/openwrt.rb +77 -0
- data/lib/oxidized/model/opnsense.rb +19 -0
- data/lib/oxidized/model/outputs.rb +1 -3
- data/lib/oxidized/model/panos.rb +1 -2
- data/lib/oxidized/model/pfsense.rb +9 -5
- data/lib/oxidized/model/planet.rb +8 -12
- data/lib/oxidized/model/powerconnect.rb +6 -9
- data/lib/oxidized/model/procurve.rb +18 -4
- data/lib/oxidized/model/quantaos.rb +3 -5
- data/lib/oxidized/model/routeros.rb +3 -2
- data/lib/oxidized/model/saos.rb +0 -1
- data/lib/oxidized/model/screenos.rb +3 -5
- data/lib/oxidized/model/sgos.rb +2 -3
- data/lib/oxidized/model/siklu.rb +0 -2
- data/lib/oxidized/model/slxos.rb +59 -0
- data/lib/oxidized/model/sros.rb +117 -0
- data/lib/oxidized/model/stoneos.rb +32 -0
- data/lib/oxidized/model/supermicro.rb +6 -41
- data/lib/oxidized/model/timos.rb +6 -114
- data/lib/oxidized/model/tmos.rb +1 -3
- data/lib/oxidized/model/tplink.rb +7 -11
- data/lib/oxidized/model/trango.rb +6 -7
- data/lib/oxidized/model/ucs.rb +0 -1
- data/lib/oxidized/model/voltaire.rb +3 -6
- data/lib/oxidized/model/voss.rb +1 -2
- data/lib/oxidized/model/vrp.rb +4 -5
- data/lib/oxidized/model/vyatta.rb +6 -4
- data/lib/oxidized/model/weos.rb +1 -3
- data/lib/oxidized/model/xos.rb +6 -5
- data/lib/oxidized/model/zhoneolt.rb +2 -2
- data/lib/oxidized/model/zynos.rb +1 -3
- data/lib/oxidized/model/zynoscli.rb +36 -0
- data/lib/oxidized/node.rb +11 -11
- data/lib/oxidized/node/stats.rb +15 -2
- data/lib/oxidized/nodes.rb +8 -8
- data/lib/oxidized/output/file.rb +41 -42
- data/lib/oxidized/output/git.rb +113 -115
- data/lib/oxidized/output/gitcrypt.rb +241 -242
- data/lib/oxidized/output/http.rb +23 -27
- data/lib/oxidized/output/output.rb +1 -2
- data/lib/oxidized/source/csv.rb +44 -45
- data/lib/oxidized/source/http.rb +52 -49
- data/lib/oxidized/source/source.rb +6 -7
- data/lib/oxidized/source/sql.rb +55 -51
- data/lib/oxidized/string.rb +3 -4
- data/lib/oxidized/version.rb +17 -1
- data/lib/oxidized/worker.rb +12 -3
- data/oxidized.gemspec +19 -13
- metadata +139 -51
- data/.ruby-version +0 -1
- data/Gemfile.lock +0 -44
data/lib/oxidized/jobs.rb
CHANGED
@@ -6,7 +6,7 @@ module Oxidized
|
|
6
6
|
|
7
7
|
def initialize max, interval, nodes
|
8
8
|
@max = max
|
9
|
-
# Set interval to 1 if interval is 0 (=disabled) so we don't break
|
9
|
+
# Set interval to 1 if interval is 0 (=disabled) so we don't break
|
10
10
|
# the 'ceil' function
|
11
11
|
@interval = interval == 0 ? 1 : interval
|
12
12
|
@nodes = nodes
|
@@ -28,7 +28,7 @@ module Oxidized
|
|
28
28
|
@durations.fill AVERAGE_DURATION, @durations.size...@nodes.size
|
29
29
|
end
|
30
30
|
@durations.push(last).shift
|
31
|
-
@duration = @durations.inject(:+).to_f / @nodes.size #rolling average
|
31
|
+
@duration = @durations.inject(:+).to_f / @nodes.size # rolling average
|
32
32
|
new_count
|
33
33
|
end
|
34
34
|
|
@@ -45,9 +45,8 @@ module Oxidized
|
|
45
45
|
# and c) there is more than MAX_INTER_JOB_GAP since last one was started
|
46
46
|
# then we want one more thread (rationale is to fix hanging thread causing HOLB)
|
47
47
|
if @want <= size and @want < @nodes.size
|
48
|
-
@want +=1 if (Time.now.utc - @last) > MAX_INTER_JOB_GAP
|
48
|
+
@want += 1 if (Time.now.utc - @last) > MAX_INTER_JOB_GAP
|
49
49
|
end
|
50
50
|
end
|
51
|
-
|
52
51
|
end
|
53
52
|
end
|
data/lib/oxidized/manager.rb
CHANGED
@@ -7,11 +7,11 @@ module Oxidized
|
|
7
7
|
class << self
|
8
8
|
def load dir, file
|
9
9
|
begin
|
10
|
-
require File.join dir, file+'.rb'
|
10
|
+
require File.join dir, file + '.rb'
|
11
11
|
klass = nil
|
12
12
|
[Oxidized, Object].each do |mod|
|
13
13
|
klass = mod.constants.find { |const| const.to_s.downcase == file.downcase }
|
14
|
-
klass = mod.constants.find { |const| const.to_s.downcase == 'oxidized'+ file.downcase } unless klass
|
14
|
+
klass = mod.constants.find { |const| const.to_s.downcase == 'oxidized' + file.downcase } unless klass
|
15
15
|
klass = mod.const_get klass if klass
|
16
16
|
break if klass
|
17
17
|
end
|
@@ -31,16 +31,19 @@ module Oxidized
|
|
31
31
|
@source = {}
|
32
32
|
@hook = {}
|
33
33
|
end
|
34
|
+
|
34
35
|
def add_input method
|
35
36
|
method = Manager.load Config::InputDir, method
|
36
37
|
return false if method.empty?
|
37
38
|
@input.merge! method
|
38
39
|
end
|
40
|
+
|
39
41
|
def add_output method
|
40
42
|
method = Manager.load Config::OutputDir, method
|
41
43
|
return false if method.empty?
|
42
44
|
@output.merge! method
|
43
45
|
end
|
46
|
+
|
44
47
|
def add_model _model
|
45
48
|
name = _model
|
46
49
|
_model = Manager.load File.join(Config::Root, 'model'), name
|
@@ -48,14 +51,16 @@ module Oxidized
|
|
48
51
|
return false if _model.empty?
|
49
52
|
@model.merge! _model
|
50
53
|
end
|
54
|
+
|
51
55
|
def add_source _source
|
52
|
-
return nil if @source.
|
56
|
+
return nil if @source.has_key? _source
|
53
57
|
_source = Manager.load Config::SourceDir, _source
|
54
58
|
return false if _source.empty?
|
55
59
|
@source.merge! _source
|
56
60
|
end
|
61
|
+
|
57
62
|
def add_hook _hook
|
58
|
-
return nil if @hook.
|
63
|
+
return nil if @hook.has_key? _hook
|
59
64
|
name = _hook
|
60
65
|
_hook = Manager.load File.join(Config::Root, 'hook'), name
|
61
66
|
_hook = Manager.load Config::HookDir, name if _hook.empty?
|
data/lib/oxidized/model/acos.rb
CHANGED
@@ -3,7 +3,7 @@ class ACOS < Oxidized::Model
|
|
3
3
|
|
4
4
|
comment '! '
|
5
5
|
|
6
|
-
|
6
|
+
# ACOS prompt changes depending on the state of the device
|
7
7
|
prompt /^([-\w.\/:?\[\]\(\)]+[#>]\s?)$/
|
8
8
|
|
9
9
|
cmd :secret do |cfg|
|
@@ -30,19 +30,19 @@ class ACOS < Oxidized::Model
|
|
30
30
|
end
|
31
31
|
|
32
32
|
cmd 'show partition-config all' do |cfg|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
33
|
+
cfg.gsub! /(Current configuration).*/, '\\1 <removed>'
|
34
|
+
cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>'
|
35
|
+
cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>'
|
36
|
+
cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>'
|
37
|
+
cfg
|
38
|
+
end
|
39
39
|
|
40
40
|
cmd 'show running-config all-partitions' do |cfg|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
cfg.gsub! /(Current configuration).*/, '\\1 <removed>'
|
42
|
+
cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>'
|
43
|
+
cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>'
|
44
|
+
cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>'
|
45
|
+
cfg
|
46
46
|
end
|
47
47
|
|
48
48
|
cmd 'show aflex all-partitions' do |cfg|
|
@@ -50,7 +50,7 @@ class ACOS < Oxidized::Model
|
|
50
50
|
end
|
51
51
|
|
52
52
|
cmd 'show aflex all-partitions' do |cfg|
|
53
|
-
@partitions_aflex = cfg.lines.each_with_object({}) do |l,h|
|
53
|
+
@partitions_aflex = cfg.lines.each_with_object({}) do |l, h|
|
54
54
|
h[$1] = [] if l.match /partition: (.+)/
|
55
55
|
# only consider scripts that have passed syntax check
|
56
56
|
h[h.keys.last] << $1 if l.match /^([\w-]+) +Check/
|
@@ -66,7 +66,7 @@ class ACOS < Oxidized::Model
|
|
66
66
|
pre do
|
67
67
|
unless @partitions_aflex.empty?
|
68
68
|
out = []
|
69
|
-
@partitions_aflex.each do |partition,arules|
|
69
|
+
@partitions_aflex.each do |partition, arules|
|
70
70
|
out << "! partition: #{partition}"
|
71
71
|
arules.each do |name|
|
72
72
|
cmd("show aflex #{name} partition #{partition}") do |cfg|
|
@@ -85,7 +85,7 @@ class ACOS < Oxidized::Model
|
|
85
85
|
username /login:/
|
86
86
|
password /^Password:/
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
cfg :telnet, :ssh do
|
90
90
|
# preferred way to handle additional passwords
|
91
91
|
post_login do
|
@@ -98,5 +98,4 @@ class ACOS < Oxidized::Model
|
|
98
98
|
post_login 'terminal width 0'
|
99
99
|
pre_logout "exit\nexit\nY\r\n"
|
100
100
|
end
|
101
|
-
|
102
101
|
end
|
data/lib/oxidized/model/acsw.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class ACSW < Oxidized::Model
|
2
|
-
|
3
2
|
prompt /([\w.@()\/\\-]+[#>]\s?)/
|
4
3
|
comment '! '
|
5
4
|
|
@@ -25,16 +24,13 @@ class ACSW < Oxidized::Model
|
|
25
24
|
cfg
|
26
25
|
end
|
27
26
|
|
28
|
-
|
29
27
|
cmd 'show version' do |cfg|
|
30
28
|
comment cfg
|
31
29
|
end
|
32
30
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
31
|
+
cmd 'show inventory' do |cfg|
|
32
|
+
comment cfg
|
33
|
+
end
|
38
34
|
|
39
35
|
cmd 'show running-config' do |cfg|
|
40
36
|
cfg = cfg.each_line.to_a[3..-1]
|
@@ -63,5 +59,4 @@ class ACSW < Oxidized::Model
|
|
63
59
|
post_login 'terminal length 0'
|
64
60
|
pre_logout 'exit'
|
65
61
|
end
|
66
|
-
|
67
62
|
end
|
data/lib/oxidized/model/aen.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
class Aireos < Oxidized::Model
|
2
|
-
|
3
2
|
# AireOS (at least I think that is what it's called, hard to find data)
|
4
3
|
# Used in Cisco WLC 5500
|
5
4
|
|
6
|
-
comment
|
5
|
+
comment '# ' # this complains too, can't find real comment char
|
7
6
|
prompt /^\([^\)]+\)\s>/
|
8
7
|
|
9
8
|
cmd :all do |cfg|
|
10
9
|
cfg.each_line.to_a[1..-2].join
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
# show sysinfo?
|
13
|
+
# show switchconfig?
|
15
14
|
|
16
15
|
cmd 'show udi' do |cfg|
|
17
16
|
cfg = comment clean cfg
|
@@ -51,5 +50,4 @@ class Aireos < Oxidized::Model
|
|
51
50
|
out = out.join "\n"
|
52
51
|
out << "\n"
|
53
52
|
end
|
54
|
-
|
55
53
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class ALTEONOS < Oxidized::Model
|
2
|
-
|
3
2
|
prompt /^\(?.+\)?\s?[#>]/
|
4
3
|
|
5
4
|
comment '! '
|
@@ -11,19 +10,19 @@ class ALTEONOS < Oxidized::Model
|
|
11
10
|
cfg
|
12
11
|
end
|
13
12
|
|
14
|
-
##############################################################################################
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
13
|
+
##############################################################################################
|
14
|
+
# Added to remove #
|
15
|
+
# #
|
16
|
+
# /* Configuration dump taken 14:10:20 Fri Jul 28, 2017 (DST) #
|
17
|
+
# /* Configuration last applied at 16:17:05 Fri Jul 14, 2017 #
|
18
|
+
# /* Configuration last save at 16:17:43 Fri Jul 14, 2017 #
|
19
|
+
# /* Version 29.0.3.12, vXXXXXXXX, Base MAC address XXXXXXXXXXX #
|
20
|
+
# /* To restore SSL Offloading configuration and management HTTPS access, #
|
21
|
+
# /* it is recommended to include the private keys in the dump. #
|
22
|
+
# OR #
|
23
|
+
# /* To restore SSL Offloading configuration and management HTTPS access,it is recommended #
|
24
|
+
# /* to include the private keys in the dump. #
|
25
|
+
# #
|
27
26
|
##############################################################################################
|
28
27
|
|
29
28
|
cmd 'cfg/dump' do |cfg|
|
@@ -35,19 +34,19 @@ class ALTEONOS < Oxidized::Model
|
|
35
34
|
cfg
|
36
35
|
end
|
37
36
|
|
38
|
-
#Answer for Dispay private keys
|
37
|
+
# Answer for Dispay private keys
|
39
38
|
expect /^Display private keys\?\s?\[y\/n\]\: $/ do |data, re|
|
40
39
|
send "n\r"
|
41
40
|
data.sub re, ''
|
42
41
|
end
|
43
42
|
|
44
|
-
#Answer for sync to peer on exit
|
43
|
+
# Answer for sync to peer on exit
|
45
44
|
expect /^Confirm Sync to Peer\s?\[y\/n\]\: $/ do |data, re|
|
46
45
|
send "n\r"
|
47
46
|
data.sub re, ''
|
48
47
|
end
|
49
48
|
|
50
|
-
#Answer for Unsaved configuration
|
49
|
+
# Answer for Unsaved configuration
|
51
50
|
expect /^(WARNING: There are unsaved configuration changes).*/ do |data, re|
|
52
51
|
send "n\r"
|
53
52
|
data.sub re, ''
|
@@ -56,5 +55,4 @@ class ALTEONOS < Oxidized::Model
|
|
56
55
|
cfg :ssh do
|
57
56
|
pre_logout 'exit'
|
58
57
|
end
|
59
|
-
|
60
58
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class Alvarion < Oxidized::Model
|
2
|
-
|
3
2
|
# Used in Alvarion wisp equipment
|
4
3
|
|
5
4
|
# Run this command as an instance of Model so we can access node
|
@@ -7,9 +6,6 @@ class Alvarion < Oxidized::Model
|
|
7
6
|
cmd "#{node.auth[:password]}.cfg"
|
8
7
|
end
|
9
8
|
|
10
|
-
|
11
9
|
cfg :tftp do
|
12
|
-
|
13
10
|
end
|
14
|
-
|
15
11
|
end
|
data/lib/oxidized/model/aos.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
class AOS < Oxidized::Model
|
2
|
-
|
3
2
|
# Alcatel-Lucent Operating System
|
4
3
|
# used in OmniSwitch
|
5
|
-
|
4
|
+
|
6
5
|
comment '! '
|
7
6
|
|
8
7
|
cmd :all do |cfg|
|
@@ -10,7 +9,7 @@ class AOS < Oxidized::Model
|
|
10
9
|
end
|
11
10
|
|
12
11
|
cmd 'show system' do |cfg|
|
13
|
-
cfg = cfg.each_line.find{|line|line.match 'Description'}
|
12
|
+
cfg = cfg.each_line.find { |line| line.match 'Description' }
|
14
13
|
comment cfg.to_s.strip
|
15
14
|
end
|
16
15
|
|
@@ -34,5 +33,4 @@ class AOS < Oxidized::Model
|
|
34
33
|
cfg :telnet, :ssh do
|
35
34
|
pre_logout 'exit'
|
36
35
|
end
|
37
|
-
|
38
36
|
end
|
data/lib/oxidized/model/aos7.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
class AOS7 < Oxidized::Model
|
2
|
-
|
3
2
|
# Alcatel-Lucent Operating System Version 7 (Linux based)
|
4
3
|
# used in OmniSwitch 6900/10k
|
5
|
-
|
4
|
+
|
6
5
|
comment '! '
|
7
6
|
|
8
7
|
cmd :all do |cfg, cmdstring|
|
@@ -11,7 +10,7 @@ class AOS7 < Oxidized::Model
|
|
11
10
|
end
|
12
11
|
|
13
12
|
cmd 'show system' do |cfg|
|
14
|
-
cfg = cfg.each_line.find{|line|line.match 'Description'}
|
13
|
+
cfg = cfg.each_line.find { |line| line.match 'Description' }
|
15
14
|
comment cfg.to_s.strip + "\n"
|
16
15
|
end
|
17
16
|
|
data/lib/oxidized/model/aosw.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
class AOSW < Oxidized::Model
|
2
|
-
|
3
2
|
# AOSW Aruba Wireless, IAP, Instant Controller and Mobility Access Switches
|
4
3
|
# Used in Alcatel OAW-4750 WLAN controller
|
5
4
|
# Also Dell controllers
|
6
|
-
|
5
|
+
|
7
6
|
# HPE Aruba Switches should use a different model as the software is based on the HP Procurve line.
|
8
|
-
|
7
|
+
|
9
8
|
# Support for IAP & Instant Controller tested with 115, 205, 215 & 325 running 6.4.4.8-4.2.4.5_57965
|
10
9
|
# Support for Mobility Access Switches tested with S2500-48P & S2500-24P running 7.4.1.4_54199 and S2500-24P running 7.4.1.7_57823
|
11
|
-
# All IAPs connected to a Instant Controller will have the same config output. Only the controller needs to be monitored.
|
10
|
+
# All IAPs connected to a Instant Controller will have the same config output. Only the controller needs to be monitored.
|
12
11
|
|
13
12
|
comment '# '
|
14
|
-
prompt /^\(?.+\)?\s
|
13
|
+
prompt /^\(?.+\)?\s[#>]/
|
15
14
|
|
16
15
|
cmd :all do |cfg|
|
17
16
|
cfg.each_line.to_a[1..-2].join
|
@@ -26,11 +25,11 @@ class AOSW < Oxidized::Model
|
|
26
25
|
cfg.gsub!(/ sha (\S+)/, ' sha <secret removed>')
|
27
26
|
cfg.gsub!(/ des (\S+)/, ' des <secret removed>')
|
28
27
|
cfg.gsub!(/mobility-manager (\S+) user (\S+) (\S+)/, 'mobility-manager \1 user \2 <secret removed>')
|
29
|
-
cfg.gsub!(/mgmt-user (\S+) (root|guest\-provisioning|network\-operations|read\-only|location\-api\-mgmt) (\S+)$/, 'mgmt-user \1 \2 <secret removed>') #MAS & Wireless Controler
|
30
|
-
cfg.gsub!(/mgmt-user (\S+) (\S+)( (read\-only|guest\-mgmt))?$/, 'mgmt-user \1 <secret removed> \3') #IAP
|
31
|
-
#MAS format: mgmt-user <username> <accesslevel> <password hash>
|
32
|
-
#IAP format (root user): mgmt-user <username> <password hash>
|
33
|
-
#IAP format: mgmt-user <username> <password hash> <access level>
|
28
|
+
cfg.gsub!(/mgmt-user (\S+) (root|guest\-provisioning|network\-operations|read\-only|location\-api\-mgmt) (\S+)$/, 'mgmt-user \1 \2 <secret removed>') # MAS & Wireless Controler
|
29
|
+
cfg.gsub!(/mgmt-user (\S+) (\S+)( (read\-only|guest\-mgmt))?$/, 'mgmt-user \1 <secret removed> \3') # IAP
|
30
|
+
# MAS format: mgmt-user <username> <accesslevel> <password hash>
|
31
|
+
# IAP format (root user): mgmt-user <username> <password hash>
|
32
|
+
# IAP format: mgmt-user <username> <password hash> <access level>
|
34
33
|
cfg.gsub!(/key (\S+)$/, 'key <secret removed>')
|
35
34
|
cfg.gsub!(/wpa-passphrase (\S+)$/, 'wpa-passphrase <secret removed>')
|
36
35
|
cfg.gsub!(/bkup-passwords (\S+)$/, 'bkup-passwords <secret removed>')
|
@@ -40,22 +39,22 @@ class AOSW < Oxidized::Model
|
|
40
39
|
end
|
41
40
|
|
42
41
|
cmd 'show version' do |cfg|
|
43
|
-
cfg = cfg.each_line.
|
42
|
+
cfg = cfg.each_line.reject { |line| line.match /(Switch|AP) uptime/i }
|
44
43
|
rstrip_cfg comment cfg.join
|
45
44
|
end
|
46
45
|
|
47
46
|
cmd 'show inventory' do |cfg|
|
48
|
-
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS)
|
47
|
+
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
|
49
48
|
rstrip_cfg clean cfg
|
50
49
|
end
|
51
50
|
|
52
51
|
cmd 'show slots' do |cfg|
|
53
|
-
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS)
|
52
|
+
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
|
54
53
|
rstrip_cfg comment cfg
|
55
54
|
end
|
56
55
|
|
57
56
|
cmd 'show license' do |cfg|
|
58
|
-
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS)
|
57
|
+
cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
|
59
58
|
rstrip_cfg comment cfg
|
60
59
|
end
|
61
60
|
|
@@ -112,5 +111,4 @@ class AOSW < Oxidized::Model
|
|
112
111
|
out = comment out.join "\n"
|
113
112
|
out << "\n"
|
114
113
|
end
|
115
|
-
|
116
114
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class ARBOS < Oxidized::Model
|
2
|
+
# Arbor OS model #
|
3
|
+
|
4
|
+
prompt /^[\S\s]+\n([\w.@-]+[:\/#>]+)\s?$/
|
5
|
+
comment '# '
|
6
|
+
|
7
|
+
cmd 'system hardware' do |cfg|
|
8
|
+
cfg.gsub! /^Boot\ time\:\s.+/, '' # Remove boot timer
|
9
|
+
cfg.gsub! /^Load\ averages\:\s.+/, '' # Remove CPU load info
|
10
|
+
cfg = cfg.each_line.to_a[2..-1].join
|
11
|
+
comment cfg
|
12
|
+
end
|
13
|
+
|
14
|
+
cmd 'system version' do |cfg|
|
15
|
+
comment cfg
|
16
|
+
end
|
17
|
+
|
18
|
+
cmd 'config show' do |cfg|
|
19
|
+
cfg
|
20
|
+
end
|
21
|
+
|
22
|
+
cfg :ssh do
|
23
|
+
exec true
|
24
|
+
pre_logout 'exit'
|
25
|
+
end
|
26
|
+
end
|