oxidized 0.20.0 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +4 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- data/.github/no-response.yml +13 -0
- data/.github/workflows/publishdocker.yml +13 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +73 -0
- data/.rubocop_todo.yml +120 -0
- data/.travis.yml +6 -1
- data/CHANGELOG.md +693 -243
- data/Dockerfile +27 -19
- data/LICENSE +201 -0
- data/README.md +234 -913
- data/Rakefile +48 -7
- data/TODO.md +29 -23
- data/bin/console +1 -1
- data/bin/oxidized +6 -5
- data/docs/Configuration.md +313 -0
- data/docs/Creating-Models.md +140 -0
- data/docs/Hooks.md +274 -0
- data/docs/Model-Notes/AireOS.md +11 -0
- data/docs/Model-Notes/ArbOS.md +11 -0
- data/docs/Model-Notes/Comware.md +13 -0
- data/docs/Model-Notes/Cumulus.md +40 -0
- data/docs/Model-Notes/EOS.md +12 -0
- data/docs/Model-Notes/IOS.md +29 -0
- data/docs/Model-Notes/JunOS.md +33 -0
- data/docs/Model-Notes/LinuxGeneric.md +24 -0
- data/docs/Model-Notes/Netgear.md +87 -0
- data/docs/Model-Notes/Nokia.md +9 -0
- data/docs/Model-Notes/README.md +24 -0
- data/docs/Model-Notes/SmartAX-Huawei.md +35 -0
- data/docs/Model-Notes/VRP-Huawei.md +34 -0
- data/docs/Model-Notes/Viptela.md +12 -0
- data/docs/Model-Notes/XGS4600-Zyxel.md +36 -0
- data/docs/Outputs.md +190 -0
- data/docs/Ruby-API.md +199 -0
- data/docs/Sources.md +171 -0
- data/docs/Supported-OS-Types.md +227 -0
- data/docs/Troubleshooting.md +66 -0
- data/extra/nagios_check_failing_nodes.rb +9 -2
- data/extra/oxidized-report-git-commits +21 -40
- data/extra/oxidized-ubuntu.haproxy +45 -0
- data/extra/oxidized.logrotate +7 -0
- data/extra/oxidized.service +13 -0
- data/extra/rest_client.rb +7 -10
- data/extra/syslog.rb +47 -42
- data/lib/oxidized/cli.rb +41 -31
- data/lib/oxidized/config/vars.rb +9 -14
- data/lib/oxidized/config.rb +20 -13
- data/lib/oxidized/core.rb +8 -10
- data/lib/oxidized/hook/awssns.rb +6 -7
- data/lib/oxidized/hook/ciscosparkdiff.rb +43 -0
- data/lib/oxidized/hook/exec.rb +19 -24
- data/lib/oxidized/hook/githubrepo.rb +17 -17
- data/lib/oxidized/hook/noophook.rb +1 -1
- data/lib/oxidized/hook/slackdiff.rb +32 -19
- data/lib/oxidized/hook/xmppdiff.rb +59 -0
- data/lib/oxidized/hook.rb +63 -64
- data/lib/oxidized/input/cli.rb +22 -12
- data/lib/oxidized/input/exec.rb +28 -0
- data/lib/oxidized/input/ftp.rb +16 -15
- data/lib/oxidized/input/http.rb +72 -0
- data/lib/oxidized/input/input.rb +6 -6
- data/lib/oxidized/input/ssh.rb +64 -56
- data/lib/oxidized/input/telnet.rb +59 -102
- data/lib/oxidized/input/tftp.rb +9 -10
- data/lib/oxidized/jobs.rb +9 -10
- data/lib/oxidized/manager.rb +42 -44
- data/lib/oxidized/model/acos.rb +19 -20
- data/lib/oxidized/model/acsw.rb +62 -0
- data/lib/oxidized/model/adtran.rb +26 -0
- data/lib/oxidized/model/aen.rb +19 -0
- data/lib/oxidized/model/aireos.rb +9 -10
- data/lib/oxidized/model/airfiber.rb +22 -0
- data/lib/oxidized/model/alteonos.rb +58 -0
- data/lib/oxidized/model/alvarion.rb +0 -4
- data/lib/oxidized/model/aos.rb +11 -5
- data/lib/oxidized/model/aos7.rb +6 -7
- data/lib/oxidized/model/aosw.rb +30 -27
- data/lib/oxidized/model/apc_aos.rb +2 -5
- data/lib/oxidized/model/arbos.rb +26 -0
- data/lib/oxidized/model/aricentiss.rb +49 -0
- data/lib/oxidized/model/asa.rb +61 -22
- data/lib/oxidized/model/asyncos.rb +46 -0
- data/lib/oxidized/model/audiocodes.rb +28 -0
- data/lib/oxidized/model/audiocodesmp.rb +28 -0
- data/lib/oxidized/model/awplus.rb +84 -0
- data/lib/oxidized/model/axos.rb +16 -0
- data/lib/oxidized/model/boss.rb +77 -0
- data/lib/oxidized/model/br6910.rb +42 -45
- data/lib/oxidized/model/c4cmts.rb +6 -10
- data/lib/oxidized/model/cambium.rb +23 -0
- data/lib/oxidized/model/casa.rb +1 -1
- data/lib/oxidized/model/catos.rb +1 -3
- data/lib/oxidized/model/cisconga.rb +1 -3
- data/lib/oxidized/model/ciscosma.rb +42 -0
- data/lib/oxidized/model/ciscosmb.rb +30 -10
- data/lib/oxidized/model/ciscovpn3k.rb +11 -0
- data/lib/oxidized/model/cnos.rb +33 -0
- data/lib/oxidized/model/comnetms.rb +43 -0
- data/lib/oxidized/model/comtrol.rb +41 -0
- data/lib/oxidized/model/comware.rb +28 -16
- data/lib/oxidized/model/coriant8600.rb +3 -5
- data/lib/oxidized/model/coriantgroove.rb +26 -0
- data/lib/oxidized/model/corianttmos.rb +1 -3
- data/lib/oxidized/model/cumulus.rb +60 -49
- data/lib/oxidized/model/datacom.rb +1 -4
- data/lib/oxidized/model/dcnos.rb +46 -0
- data/lib/oxidized/model/dellx.rb +76 -0
- data/lib/oxidized/model/dlink.rb +5 -4
- data/lib/oxidized/model/dnos.rb +11 -5
- data/lib/oxidized/model/eciapollo.rb +34 -0
- data/lib/oxidized/model/edgecos.rb +49 -0
- data/lib/oxidized/model/edgeos.rb +12 -5
- data/lib/oxidized/model/edgeswitch.rb +2 -4
- data/lib/oxidized/model/enterasys.rb +28 -0
- data/lib/oxidized/model/eos.rb +8 -8
- data/lib/oxidized/model/fabricos.rb +4 -6
- data/lib/oxidized/model/fastiron.rb +66 -0
- data/lib/oxidized/model/fiberdriver.rb +2 -2
- data/lib/oxidized/model/firebrick.rb +31 -0
- data/lib/oxidized/model/firelinuxos.rb +41 -0
- data/lib/oxidized/model/firewareos.rb +3 -6
- data/lib/oxidized/model/fortios.rb +31 -19
- data/lib/oxidized/model/ftos.rb +8 -5
- data/lib/oxidized/model/fujitsupy.rb +5 -7
- data/lib/oxidized/model/gaiaos.rb +7 -11
- data/lib/oxidized/model/gcombnps.rb +84 -0
- data/lib/oxidized/model/grandstream.rb +9 -0
- data/lib/oxidized/model/hatteras.rb +9 -6
- data/lib/oxidized/model/hirschmann.rb +39 -0
- data/lib/oxidized/model/hpebladesystem.rb +20 -18
- data/lib/oxidized/model/hpemsa.rb +10 -0
- data/lib/oxidized/model/hpmsm.rb +84 -0
- data/lib/oxidized/model/ibos.rb +55 -0
- data/lib/oxidized/model/icotera.rb +27 -0
- data/lib/oxidized/model/ios.rb +63 -70
- data/lib/oxidized/model/iosxe.rb +5 -0
- data/lib/oxidized/model/iosxr.rb +2 -3
- data/lib/oxidized/model/ipos.rb +10 -6
- data/lib/oxidized/model/ironware.rb +20 -19
- data/lib/oxidized/model/isam.rb +5 -6
- data/lib/oxidized/model/junos.rb +9 -11
- data/lib/oxidized/model/linuxgeneric.rb +74 -0
- data/lib/oxidized/model/masteros.rb +3 -6
- data/lib/oxidized/model/mlnxos.rb +9 -10
- data/lib/oxidized/model/model.rb +72 -46
- data/lib/oxidized/model/mtrlrfs.rb +1 -4
- data/lib/oxidized/model/ndms.rb +23 -0
- data/lib/oxidized/model/netgear.rb +35 -15
- data/lib/oxidized/model/netonix.rb +2 -2
- data/lib/oxidized/model/netscaler.rb +6 -3
- data/lib/oxidized/model/nos.rb +5 -7
- data/lib/oxidized/model/nsxconfig.rb +22 -0
- data/lib/oxidized/model/nsxfirewall.rb +22 -0
- data/lib/oxidized/model/nxos.rb +13 -3
- data/lib/oxidized/model/oneos.rb +15 -9
- data/lib/oxidized/model/openbsd.rb +63 -0
- data/lib/oxidized/model/opengear.rb +3 -5
- data/lib/oxidized/model/openwrt.rb +78 -0
- data/lib/oxidized/model/opnsense.rb +19 -0
- data/lib/oxidized/model/os10.rb +46 -0
- data/lib/oxidized/model/outputs.rb +5 -7
- data/lib/oxidized/model/panos.rb +11 -12
- data/lib/oxidized/model/pfsense.rb +11 -6
- data/lib/oxidized/model/planet.rb +14 -17
- data/lib/oxidized/model/powerconnect.rb +24 -19
- data/lib/oxidized/model/procurve.rb +43 -11
- data/lib/oxidized/model/purityos.rb +12 -0
- data/lib/oxidized/model/qtech.rb +41 -0
- data/lib/oxidized/model/quantaos.rb +4 -6
- data/lib/oxidized/model/raisecom.rb +19 -0
- data/lib/oxidized/model/routeros.rb +26 -8
- data/lib/oxidized/model/saos.rb +1 -2
- data/lib/oxidized/model/screenos.rb +8 -11
- data/lib/oxidized/model/sgos.rb +45 -0
- data/lib/oxidized/model/siklu.rb +1 -3
- data/lib/oxidized/model/slxos.rb +59 -0
- data/lib/oxidized/model/smartax.rb +25 -0
- data/lib/oxidized/model/sonicos.rb +51 -0
- data/lib/oxidized/model/speedtouch.rb +34 -0
- data/lib/oxidized/model/sros.rb +96 -0
- data/lib/oxidized/model/stoneos.rb +32 -0
- data/lib/oxidized/model/supermicro.rb +6 -41
- data/lib/oxidized/model/tdre.rb +30 -0
- data/lib/oxidized/model/telco.rb +24 -0
- data/lib/oxidized/model/timos.rb +6 -114
- data/lib/oxidized/model/tmos.rb +6 -3
- data/lib/oxidized/model/tplink.rb +11 -11
- data/lib/oxidized/model/trango.rb +21 -42
- data/lib/oxidized/model/ucs.rb +30 -0
- data/lib/oxidized/model/viptela.rb +29 -0
- data/lib/oxidized/model/voltaire.rb +9 -12
- data/lib/oxidized/model/voss.rb +17 -6
- data/lib/oxidized/model/vrp.rb +11 -6
- data/lib/oxidized/model/vyatta.rb +8 -6
- data/lib/oxidized/model/weos.rb +20 -0
- data/lib/oxidized/model/xos.rb +20 -8
- 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/model/zynosgs.rb +38 -0
- data/lib/oxidized/node/stats.rb +33 -8
- data/lib/oxidized/node.rb +86 -95
- data/lib/oxidized/nodes.rb +48 -44
- data/lib/oxidized/output/file.rb +32 -37
- data/lib/oxidized/output/git.rb +138 -153
- data/lib/oxidized/output/gitcrypt.rb +228 -242
- data/lib/oxidized/output/http.rb +35 -34
- data/lib/oxidized/output/output.rb +2 -3
- data/lib/oxidized/source/csv.rb +50 -44
- data/lib/oxidized/source/http.rb +58 -58
- data/lib/oxidized/source/source.rb +9 -10
- data/lib/oxidized/source/sql.rb +47 -45
- data/lib/oxidized/string.rb +18 -14
- data/lib/oxidized/version.rb +17 -1
- data/lib/oxidized/worker.rb +72 -33
- data/oxidized.gemspec +20 -19
- metadata +180 -36
- data/.ruby-version +0 -1
- data/Gemfile.lock +0 -44
@@ -1,6 +1,5 @@
|
|
1
1
|
class CiscoSMB < Oxidized::Model
|
2
|
-
|
3
|
-
# Cisco Small Business 200, 300, 500, and ESW2 series switches
|
2
|
+
# Cisco Small Business 300, 500, and ESW2 series switches
|
4
3
|
# http://www.cisco.com/c/en/us/support/switches/small-business-300-series-managed-switches/products-release-notes-list.html
|
5
4
|
|
6
5
|
prompt /^\r?([\w.@()-]+[#>]\s?)$/
|
@@ -9,17 +8,29 @@ class CiscoSMB < Oxidized::Model
|
|
9
8
|
cmd :all do |cfg|
|
10
9
|
lines = cfg.each_line.to_a[1..-2]
|
11
10
|
# Remove \r from beginning of response
|
12
|
-
lines[0].gsub!(/^\r.*?/, '')
|
11
|
+
lines[0].gsub!(/^\r.*?/, '') unless lines.empty?
|
13
12
|
lines.join
|
14
13
|
end
|
15
14
|
|
16
15
|
cmd :secret do |cfg|
|
17
16
|
cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
|
18
17
|
cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>'
|
18
|
+
cfg.gsub! /^(username \S+ password encrypted) \S+(.*)/, '\\1 <secret hidden> \\2'
|
19
|
+
cfg.gsub! /^(enable password level \d+ encrypted) \S+/, '\\1 <secret hidden>'
|
20
|
+
cfg.gsub! /^(encrypted radius-server key).*/, '\\1 <configuration removed>'
|
21
|
+
cfg.gsub! /^(encrypted radius-server host .+ key) \S+(.*)/, '\\1 <secret hidden> \\2'
|
22
|
+
cfg.gsub! /^(encrypted tacacs-server key).*/, '\\1 <secret hidden>'
|
23
|
+
cfg.gsub! /^(encrypted tacacs-server host .+ key) \S+(.*)/, '\\1 <secret hidden> \\2'
|
24
|
+
cfg.gsub! /^(encrypted sntp authentication-key \d+ md5) .*/, '\\1 <secret hidden>'
|
19
25
|
cfg
|
20
26
|
end
|
21
27
|
|
22
28
|
cmd 'show version' do |cfg|
|
29
|
+
cfg.gsub! /uptime is\ .+/, '<uptime removed>'
|
30
|
+
comment cfg
|
31
|
+
end
|
32
|
+
|
33
|
+
cmd 'show bootvar' do |cfg|
|
23
34
|
comment cfg
|
24
35
|
end
|
25
36
|
|
@@ -27,20 +38,29 @@ class CiscoSMB < Oxidized::Model
|
|
27
38
|
cfg = cfg.each_line.to_a[0..-1].join
|
28
39
|
cfg.gsub! /^Current configuration : [^\n]*\n/, ''
|
29
40
|
cfg.sub! /^(ntp clock-period).*/, '! \1'
|
30
|
-
cfg.gsub!
|
31
|
-
(
|
32
|
-
tunnel
|
41
|
+
cfg.gsub! /^ tunnel mpls traffic-eng bandwidth[^\n]*\n*(
|
42
|
+
(?: [^\n]*\n*)*
|
43
|
+
tunnel mpls traffic-eng auto-bw)/mx, '\1'
|
33
44
|
cfg
|
34
45
|
end
|
35
46
|
|
36
47
|
cfg :telnet, :ssh do
|
37
|
-
username
|
38
|
-
password /^\r?Password
|
48
|
+
username /User ?[nN]ame:/
|
49
|
+
password /^\r?Password:/
|
50
|
+
|
51
|
+
post_login do
|
52
|
+
if vars(:enable) == true
|
53
|
+
cmd 'enable'
|
54
|
+
elsif vars(:enable)
|
55
|
+
cmd 'enable', /^\r?Password:$/
|
56
|
+
cmd vars(:enable)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
39
60
|
post_login 'terminal datadump' # Disable pager
|
40
61
|
post_login 'terminal width 0'
|
41
62
|
post_login 'terminal len 0'
|
42
|
-
pre_logout 'exit' #exit returns to previous priv level, no way to quit from exec(#)
|
63
|
+
pre_logout 'exit' # exit returns to previous priv level, no way to quit from exec(#)
|
43
64
|
pre_logout 'exit'
|
44
65
|
end
|
45
|
-
|
46
66
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CiscoVPN3k < Oxidized::Model
|
2
|
+
# Used in Cisco VPN3000 concentrators
|
3
|
+
# it have buggy code 227 reply with whitespace before trailing bracket
|
4
|
+
# "227 Passive mode OK (172,16,0,9,4,9 )"
|
5
|
+
# so use active ftp if you can. Or patch net/ftp
|
6
|
+
|
7
|
+
cmd 'CONFIG'
|
8
|
+
|
9
|
+
cfg :ftp do
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# model for Centec Networks CNOS based switches
|
2
|
+
class CNOS < Oxidized::Model
|
3
|
+
comment '! '
|
4
|
+
|
5
|
+
cmd :all do |cfg|
|
6
|
+
cfg.each_line.to_a[0..-2].join
|
7
|
+
end
|
8
|
+
|
9
|
+
cmd 'show running-config' do |cfg|
|
10
|
+
cfg.gsub!(/(snmp-server community )(\S+)/, '\1<hidden>')
|
11
|
+
cfg.gsub!(/key type private.+key string end/m, '<private key hidden>')
|
12
|
+
cfg
|
13
|
+
end
|
14
|
+
|
15
|
+
cmd 'show version' do |cfg|
|
16
|
+
cfg.gsub! /^(.* uptime is ).*\n/, '\1'
|
17
|
+
comment cfg
|
18
|
+
end
|
19
|
+
|
20
|
+
cmd 'show transceiver' do |cfg|
|
21
|
+
comment cfg
|
22
|
+
end
|
23
|
+
|
24
|
+
cfg :telnet do
|
25
|
+
username /^Username:/
|
26
|
+
password /^Password:/
|
27
|
+
end
|
28
|
+
|
29
|
+
cfg :telnet, :ssh do
|
30
|
+
post_login 'terminal length 0'
|
31
|
+
pre_logout 'exit'
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class ComnetMS < Oxidized::Model
|
2
|
+
# Comnet Microsemi Switch
|
3
|
+
prompt /^\r?([\w.@()-]+[#>]\s?)$/
|
4
|
+
comment '! '
|
5
|
+
|
6
|
+
cmd :all do |cfg|
|
7
|
+
cfg.each_line.to_a[1..-2].join
|
8
|
+
end
|
9
|
+
|
10
|
+
cmd 'show running-config' do |cfg|
|
11
|
+
cfg.gsub! "\n\r", "\n"
|
12
|
+
cfg.gsub! /^[\r\n\s]*Building configuration\.\.\.\n/, ''
|
13
|
+
cfg.gsub! /^end\n/, ''
|
14
|
+
cfg
|
15
|
+
end
|
16
|
+
|
17
|
+
cmd 'show version' do |cfg|
|
18
|
+
cfg.gsub! "\n\r", "\n"
|
19
|
+
cfg.gsub! /^MEMORY\s*:.*\n/, ''
|
20
|
+
cfg.gsub! /^FLASH\s*:.*\n/, ''
|
21
|
+
cfg.gsub! /^Previous Restart\s*:.*\n/, ''
|
22
|
+
cfg.gsub! /^System Time\s*:.*\n/, ''
|
23
|
+
cfg.gsub! /^System Uptime\s*:.*\n/, ''
|
24
|
+
comment cfg
|
25
|
+
end
|
26
|
+
|
27
|
+
cfg :telnet do
|
28
|
+
username /^Username:/i
|
29
|
+
password /^Password:/i
|
30
|
+
end
|
31
|
+
|
32
|
+
cfg :telnet, :ssh do
|
33
|
+
if vars :enable
|
34
|
+
post_login do
|
35
|
+
send "enable\n"
|
36
|
+
cmd vars(:enable)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
post_login 'terminal length 0'
|
40
|
+
post_login 'terminal width 0'
|
41
|
+
pre_logout 'exit'
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Comtrol < Oxidized::Model
|
2
|
+
# Used in Comtrol Industrial Switches, such as RocketLinx ES8510
|
3
|
+
|
4
|
+
# Typical prompt "<hostname>#"
|
5
|
+
prompt /([#>]\s?)$/
|
6
|
+
comment '! '
|
7
|
+
|
8
|
+
# how to handle pager
|
9
|
+
expect /--More--+\s$/ do |data, re|
|
10
|
+
send ' '
|
11
|
+
data.sub re, ''
|
12
|
+
end
|
13
|
+
|
14
|
+
cmd 'show version' do |cfg|
|
15
|
+
comment cfg
|
16
|
+
end
|
17
|
+
|
18
|
+
cmd 'show running-config' do |cfg|
|
19
|
+
cfg
|
20
|
+
end
|
21
|
+
|
22
|
+
cfg :telnet do
|
23
|
+
username /^User name:/i
|
24
|
+
password /^Password:/i
|
25
|
+
end
|
26
|
+
|
27
|
+
cfg :telnet, :ssh do
|
28
|
+
if vars :enable
|
29
|
+
post_login do
|
30
|
+
send "enable\n"
|
31
|
+
# Interpret enable: true as meaning we won't be prompted for a password
|
32
|
+
unless vars(:enable).is_a? TrueClass
|
33
|
+
expect /[pP]assword:\s?$/
|
34
|
+
send vars(:enable) + "\n"
|
35
|
+
end
|
36
|
+
expect /^.+[#]\s?$/
|
37
|
+
end
|
38
|
+
end
|
39
|
+
pre_logout 'exit'
|
40
|
+
end
|
41
|
+
end
|
@@ -1,32 +1,33 @@
|
|
1
1
|
class Comware < Oxidized::Model
|
2
2
|
# HP (A-series)/H3C/3Com Comware
|
3
|
-
|
4
|
-
# sometimes the prompt might have a leading nul
|
5
|
-
prompt /^\0*(<[\w.-]+>)
|
3
|
+
|
4
|
+
# sometimes the prompt might have a leading nul or trailing ASCII Bell (^G)
|
5
|
+
prompt /^\0*(<[\w.-]+>).?$/
|
6
6
|
comment '# '
|
7
7
|
|
8
8
|
# example how to handle pager
|
9
|
-
#expect /^\s*---- More ----$/ do |data, re|
|
9
|
+
# expect /^\s*---- More ----$/ do |data, re|
|
10
10
|
# send ' '
|
11
11
|
# data.sub re, ''
|
12
|
-
#end
|
12
|
+
# end
|
13
13
|
|
14
14
|
cmd :all do |cfg|
|
15
|
-
#cfg.gsub! /^.*\e\[42D/, '' # example how to handle pager
|
16
|
-
#skip rogue ^M
|
17
|
-
cfg = cfg.
|
18
|
-
cfg.
|
15
|
+
# cfg.gsub! /^.*\e\[42D/, '' # example how to handle pager
|
16
|
+
# skip rogue ^M
|
17
|
+
cfg = cfg.delete "\r"
|
18
|
+
cfg.cut_both
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
cmd :secret do |cfg|
|
22
22
|
cfg.gsub! /^( snmp-agent community).*/, '\\1 <configuration removed>'
|
23
23
|
cfg.gsub! /^( password hash).*/, '\\1 <configuration removed>'
|
24
|
+
cfg.gsub! /^( password cipher).*/, '\\1 <configuration removed>'
|
24
25
|
cfg
|
25
26
|
end
|
26
27
|
|
27
28
|
cfg :telnet do
|
28
|
-
username /^Username
|
29
|
-
password /^Password
|
29
|
+
username /^(Username|login):/
|
30
|
+
password /^Password:/
|
30
31
|
end
|
31
32
|
|
32
33
|
cfg :telnet, :ssh do
|
@@ -35,9 +36,15 @@ class Comware < Oxidized::Model
|
|
35
36
|
# the pager cannot be disabled before _cmdline-mode on.
|
36
37
|
if vars :comware_cmdline
|
37
38
|
post_login do
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
# HP V1910, V1920
|
40
|
+
cmd '_cmdline-mode on', /(#{@node.prompt}|Continue)/
|
41
|
+
cmd 'y', /(#{@node.prompt}|input password)/
|
42
|
+
cmd vars(:comware_cmdline)
|
43
|
+
|
44
|
+
# HP V1950
|
45
|
+
cmd 'xtd-cli-mode on', /(#{@node.prompt}|Continue)/
|
46
|
+
cmd 'y', /(#{@node.prompt}|input password)/
|
47
|
+
cmd vars(:comware_cmdline)
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
@@ -47,7 +54,7 @@ class Comware < Oxidized::Model
|
|
47
54
|
end
|
48
55
|
|
49
56
|
cmd 'display version' do |cfg|
|
50
|
-
cfg = cfg.each_line.
|
57
|
+
cfg = cfg.each_line.reject { |l| l.match /uptime/i }.join
|
51
58
|
comment cfg
|
52
59
|
end
|
53
60
|
|
@@ -55,6 +62,11 @@ class Comware < Oxidized::Model
|
|
55
62
|
comment cfg
|
56
63
|
end
|
57
64
|
|
65
|
+
cmd 'display device manuinfo' do |cfg|
|
66
|
+
cfg = cfg.each_line.reject { |l| l.match 'FF'.hex.chr }.join
|
67
|
+
comment cfg
|
68
|
+
end
|
69
|
+
|
58
70
|
cmd 'display current-configuration' do |cfg|
|
59
71
|
cfg
|
60
72
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
class Coriant8600 < Oxidized::Model
|
2
|
-
|
3
2
|
comment '# '
|
4
|
-
|
3
|
+
|
5
4
|
prompt /^[^\s#>]+[#>]$/
|
6
5
|
|
7
6
|
cmd 'show hw-inventory' do |cfg|
|
@@ -11,7 +10,7 @@ class Coriant8600 < Oxidized::Model
|
|
11
10
|
cmd 'show flash' do |cfg|
|
12
11
|
comment cfg
|
13
12
|
end
|
14
|
-
|
13
|
+
|
15
14
|
cmd 'show run' do |cfg|
|
16
15
|
cfg
|
17
16
|
end
|
@@ -20,11 +19,10 @@ class Coriant8600 < Oxidized::Model
|
|
20
19
|
username /^user name:$/
|
21
20
|
password /^password:$/
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
cfg :telnet, :ssh do
|
25
24
|
pre_logout 'exit'
|
26
25
|
post_login 'enable'
|
27
26
|
post_login 'terminal more off'
|
28
27
|
end
|
29
|
-
|
30
28
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class CoriantGroove < Oxidized::Model
|
2
|
+
comment '# '
|
3
|
+
|
4
|
+
prompt /^(\w+@.*>\s*)$/
|
5
|
+
|
6
|
+
cmd :all do |cfg|
|
7
|
+
cfg.each_line.to_a[1..-3].map { |line| line.delete("\r").rstrip }.join("\n") + "\n"
|
8
|
+
end
|
9
|
+
|
10
|
+
cmd 'show inventory' do |cfg|
|
11
|
+
comment cfg.cut_tail
|
12
|
+
end
|
13
|
+
|
14
|
+
cmd 'show softwareload' do |cfg|
|
15
|
+
comment cfg.cut_tail
|
16
|
+
end
|
17
|
+
|
18
|
+
cmd 'show config | display commands' do |cfg|
|
19
|
+
cfg.cut_head
|
20
|
+
end
|
21
|
+
|
22
|
+
cfg :ssh do
|
23
|
+
post_login 'set -f cli-config cli-columns 4000'
|
24
|
+
pre_logout 'quit -f'
|
25
|
+
end
|
26
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
class CoriantTmos < Oxidized::Model
|
2
|
-
|
3
2
|
comment '# '
|
4
|
-
|
3
|
+
|
5
4
|
prompt /^[^\s#]+#\s$/
|
6
5
|
|
7
6
|
cmd 'show node extensive' do |cfg|
|
@@ -21,5 +20,4 @@ class CoriantTmos < Oxidized::Model
|
|
21
20
|
pre_logout 'exit'
|
22
21
|
post_login 'enable config terminal length 0'
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
@@ -1,85 +1,85 @@
|
|
1
1
|
class Cumulus < Oxidized::Model
|
2
|
-
|
3
2
|
prompt /^((\w*)@(.*)):/
|
4
|
-
comment
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
"\n###### #{comment} ######\n"
|
3
|
+
comment '# '
|
4
|
+
|
5
|
+
# add a comment in the final conf
|
6
|
+
def add_comment(comment)
|
7
|
+
"\n###### #{comment} ######\n"
|
10
8
|
end
|
11
9
|
|
12
10
|
cmd :all do |cfg|
|
13
|
-
cfg.
|
11
|
+
cfg.cut_both
|
14
12
|
end
|
15
|
-
|
16
|
-
#show the persistent configuration
|
13
|
+
|
14
|
+
# show the persistent configuration
|
17
15
|
pre do
|
16
|
+
# Set FRR or Quagga in config
|
17
|
+
routing_daemon = vars(:cumulus_routing_daemon) ? vars(:cumulus_routing_daemon).downcase : 'quagga'
|
18
|
+
routing_conf_file = routing_daemon == 'frr' ? 'frr.conf' : 'Quagga.conf'
|
19
|
+
routing_daemon_shout = routing_daemon.upcase
|
20
|
+
|
18
21
|
cfg = add_comment 'THE HOSTNAME'
|
19
22
|
cfg += cmd 'cat /etc/hostname'
|
20
|
-
|
23
|
+
|
21
24
|
cfg += add_comment 'THE HOSTS'
|
22
25
|
cfg += cmd 'cat /etc/hosts'
|
23
|
-
|
26
|
+
|
24
27
|
cfg += add_comment 'THE INTERFACES'
|
25
28
|
cfg += cmd 'grep -r "" /etc/network/interface* | cut -d "/" -f 4-'
|
26
|
-
|
29
|
+
|
27
30
|
cfg += add_comment 'RESOLV.CONF'
|
28
31
|
cfg += cmd 'cat /etc/resolv.conf'
|
29
|
-
|
32
|
+
|
30
33
|
cfg += add_comment 'NTP.CONF'
|
31
34
|
cfg += cmd 'cat /etc/ntp.conf'
|
32
|
-
|
33
|
-
cfg += add_comment 'IP Routes'
|
34
|
-
cfg += cmd 'netstat -rn'
|
35
|
-
|
35
|
+
|
36
36
|
cfg += add_comment 'SNMP settings'
|
37
37
|
cfg += cmd 'cat /etc/snmp/snmpd.conf'
|
38
|
-
|
39
|
-
cfg += add_comment
|
40
|
-
cfg += cmd
|
41
|
-
|
42
|
-
cfg += add_comment
|
43
|
-
cfg += cmd
|
44
|
-
|
45
|
-
cfg += add_comment
|
46
|
-
cfg += cmd
|
47
|
-
|
48
|
-
cfg += add_comment
|
49
|
-
cfg += cmd
|
50
|
-
|
51
|
-
cfg += add_comment
|
52
|
-
cfg += cmd
|
53
|
-
|
54
|
-
cfg += add_comment
|
55
|
-
cfg += cmd
|
56
|
-
|
38
|
+
|
39
|
+
cfg += add_comment "#{routing_daemon_shout} DAEMONS"
|
40
|
+
cfg += cmd "cat /etc/#{routing_daemon}/daemons"
|
41
|
+
|
42
|
+
cfg += add_comment "#{routing_daemon_shout} ZEBRA"
|
43
|
+
cfg += cmd "cat /etc/#{routing_daemon}/zebra.conf"
|
44
|
+
|
45
|
+
cfg += add_comment "#{routing_daemon_shout} BGP"
|
46
|
+
cfg += cmd "cat /etc/#{routing_daemon}/bgpd.conf"
|
47
|
+
|
48
|
+
cfg += add_comment "#{routing_daemon_shout} OSPF"
|
49
|
+
cfg += cmd "cat /etc/#{routing_daemon}/ospfd.conf"
|
50
|
+
|
51
|
+
cfg += add_comment "#{routing_daemon_shout} OSPF6"
|
52
|
+
cfg += cmd "cat /etc/#{routing_daemon}/ospf6d.conf"
|
53
|
+
|
54
|
+
cfg += add_comment "#{routing_daemon_shout} CONF"
|
55
|
+
cfg += cmd "cat /etc/#{routing_daemon}/#{routing_conf_file}"
|
56
|
+
|
57
57
|
cfg += add_comment 'MOTD'
|
58
58
|
cfg += cmd 'cat /etc/motd'
|
59
|
-
|
59
|
+
|
60
60
|
cfg += add_comment 'PASSWD'
|
61
61
|
cfg += cmd 'cat /etc/passwd'
|
62
|
-
|
62
|
+
|
63
63
|
cfg += add_comment 'SWITCHD'
|
64
64
|
cfg += cmd 'cat /etc/cumulus/switchd.conf'
|
65
|
-
|
65
|
+
|
66
66
|
cfg += add_comment 'PORTS'
|
67
67
|
cfg += cmd 'cat /etc/cumulus/ports.conf'
|
68
|
-
|
68
|
+
|
69
69
|
cfg += add_comment 'TRAFFIC'
|
70
70
|
cfg += cmd 'cat /etc/cumulus/datapath/traffic.conf'
|
71
|
-
|
71
|
+
|
72
72
|
cfg += add_comment 'ACL'
|
73
|
-
cfg += cmd '
|
74
|
-
|
73
|
+
cfg += cmd 'cat /etc/cumulus/acl/policy.conf'
|
74
|
+
|
75
75
|
cfg += add_comment 'VERSION'
|
76
76
|
cfg += cmd 'cat /etc/cumulus/etc.replace/os-release'
|
77
|
-
|
77
|
+
|
78
78
|
cfg += add_comment 'License'
|
79
79
|
cfg += cmd 'cl-license'
|
80
|
-
|
80
|
+
|
81
|
+
cfg
|
81
82
|
end
|
82
|
-
|
83
83
|
|
84
84
|
cfg :telnet do
|
85
85
|
username /^Username:/
|
@@ -87,8 +87,19 @@ class Cumulus < Oxidized::Model
|
|
87
87
|
end
|
88
88
|
|
89
89
|
cfg :telnet, :ssh do
|
90
|
+
post_login do
|
91
|
+
if vars(:enable) == true
|
92
|
+
cmd "sudo su -", /^\[sudo\] password/
|
93
|
+
cmd @node.auth[:password]
|
94
|
+
elsif vars(:enable)
|
95
|
+
cmd "su -", /^Password:/
|
96
|
+
cmd vars(:enable)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
pre_logout do
|
101
|
+
cmd "exit" if vars(:enable)
|
102
|
+
end
|
90
103
|
pre_logout 'exit'
|
91
104
|
end
|
92
|
-
|
93
|
-
|
94
105
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class DataCom < Oxidized::Model
|
2
|
-
|
3
2
|
comment '! '
|
4
3
|
|
5
4
|
expect /^--More--\s+$/ do |data, re|
|
@@ -8,8 +7,7 @@ class DataCom < Oxidized::Model
|
|
8
7
|
end
|
9
8
|
|
10
9
|
cmd :all do |cfg|
|
11
|
-
cfg.
|
12
|
-
cfg.cut_head.cut_tail
|
10
|
+
cfg.cut_head.cut_both.cut_tail
|
13
11
|
end
|
14
12
|
|
15
13
|
cmd 'show firmware' do |cfg|
|
@@ -34,5 +32,4 @@ class DataCom < Oxidized::Model
|
|
34
32
|
password /^Password:\s$/
|
35
33
|
pre_logout 'exit'
|
36
34
|
end
|
37
|
-
|
38
35
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# DCNOS is a ZebOS derivative by DCN (http://www.dcnglobal.com/)
|
2
|
+
# In addition to products by DCN (now Yunke China), this OS type
|
3
|
+
# powers a number of re-branded OEM devices.
|
4
|
+
|
5
|
+
# Developed against SNR S2950-24G 7.0.3.5
|
6
|
+
|
7
|
+
class DCNOS < Oxidized::Model
|
8
|
+
comment '! '
|
9
|
+
|
10
|
+
cmd :all do |cfg|
|
11
|
+
cfg.cut_head
|
12
|
+
end
|
13
|
+
|
14
|
+
cmd 'show version' do |cfg|
|
15
|
+
cfg.gsub! /\s(Uptime is).*/, ''
|
16
|
+
comment cfg
|
17
|
+
end
|
18
|
+
|
19
|
+
cmd 'show boot-files' do |cfg|
|
20
|
+
comment cfg
|
21
|
+
end
|
22
|
+
|
23
|
+
cmd 'show flash' do |cfg|
|
24
|
+
comment cfg
|
25
|
+
end
|
26
|
+
|
27
|
+
cmd 'show running-config' do |cfg|
|
28
|
+
cfg
|
29
|
+
end
|
30
|
+
|
31
|
+
cfg :telnet do
|
32
|
+
username /^login:/i
|
33
|
+
password /^password:/i
|
34
|
+
end
|
35
|
+
|
36
|
+
cfg :telnet, :ssh do
|
37
|
+
if vars :enable
|
38
|
+
post_login do
|
39
|
+
send "enable\n"
|
40
|
+
cmd vars(:enable)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
post_login 'terminal length 0'
|
44
|
+
pre_logout 'exit'
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
class DellX < Oxidized::Model
|
2
|
+
# Used in Dell X-Series Switches
|
3
|
+
|
4
|
+
prompt /[#>]$/
|
5
|
+
|
6
|
+
comment '! '
|
7
|
+
|
8
|
+
expect /(^.*)?+[mM]ore\:+.*$/ do |data, re|
|
9
|
+
send ' '
|
10
|
+
data.sub re, ''
|
11
|
+
end
|
12
|
+
|
13
|
+
cmd :all do |cfg|
|
14
|
+
cfg.each_line.to_a[1..-3].join
|
15
|
+
end
|
16
|
+
|
17
|
+
cmd :secret do |cfg|
|
18
|
+
cfg.gsub! /^(username \S+ password (?:encrypted )?)\S+(.*)/, '\1<hidden>\2'
|
19
|
+
cfg
|
20
|
+
end
|
21
|
+
|
22
|
+
cmd 'show version' do |cfg|
|
23
|
+
if @stackable.nil?
|
24
|
+
@stackable = true if cfg =~ /(U|u)nit\s/
|
25
|
+
end
|
26
|
+
cfg = cfg.split("\n").reject { |line| line[/Up\sTime/] }
|
27
|
+
comment cfg.join("\n") + "\n"
|
28
|
+
end
|
29
|
+
|
30
|
+
cmd 'show system' do |cfg|
|
31
|
+
clean cfg
|
32
|
+
end
|
33
|
+
|
34
|
+
cmd 'show running-config' do |cfg|
|
35
|
+
cfg.sub(/^(sflow \S+ destination owner \S+ timeout )\d+$/, '! \1<timeout>')
|
36
|
+
end
|
37
|
+
|
38
|
+
cfg :telnet, :ssh do
|
39
|
+
username /[uU]ser\s?[nN]ame:$/
|
40
|
+
password /[pP]assword:$/
|
41
|
+
end
|
42
|
+
|
43
|
+
cfg :telnet, :ssh do
|
44
|
+
if vars :enable
|
45
|
+
post_login do
|
46
|
+
send "enable\n"
|
47
|
+
cmd vars(:enable)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
pre_logout "logout"
|
52
|
+
pre_logout "exit"
|
53
|
+
end
|
54
|
+
|
55
|
+
def clean(cfg)
|
56
|
+
out = []
|
57
|
+
skip_blocks = 0
|
58
|
+
cfg.each_line do |line|
|
59
|
+
# If this is a stackable switch we should skip this block of information
|
60
|
+
if line.match(/Up\sTime|Temperature|Power Suppl(ies|y)|Fans/i) && (@stackable == true)
|
61
|
+
skip_blocks = 1
|
62
|
+
# Some switches have another empty line. This is identified by this line having a colon
|
63
|
+
skip_blocks = 2 if line =~ /:/
|
64
|
+
end
|
65
|
+
# If we have lines to skip do this until we reach and empty line
|
66
|
+
if skip_blocks.positive?
|
67
|
+
skip_blocks -= 1 if /\S/ !~ line
|
68
|
+
next
|
69
|
+
end
|
70
|
+
out << line.strip
|
71
|
+
end
|
72
|
+
out = out.reject { |line| line[/Up\sTime/] }
|
73
|
+
out = comment out.join "\n"
|
74
|
+
out << "\n"
|
75
|
+
end
|
76
|
+
end
|