oxidized 0.28.0 → 0.29.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.
- checksums.yaml +4 -4
- data/.github/workflows/publishdocker.yml +8 -1
- data/.github/workflows/ruby.yml +42 -0
- data/.rubocop.yml +30 -10
- data/.rubocop_todo.yml +95 -41
- data/CHANGELOG.md +139 -2
- data/Dockerfile +13 -9
- data/README.md +66 -32
- data/Rakefile +2 -0
- data/docs/Configuration.md +49 -7
- data/docs/Creating-Models.md +10 -4
- data/docs/Hooks.md +35 -6
- data/docs/Model-Notes/ADVA.md +12 -0
- data/docs/Model-Notes/Cumulus.md +7 -1
- data/docs/Model-Notes/IOS.md +36 -0
- data/docs/Model-Notes/JunOS.md +3 -3
- data/docs/Model-Notes/LenovoNOS.md +29 -0
- data/docs/Model-Notes/LinksysSRW.md +15 -0
- data/docs/Model-Notes/Nokia.md +3 -0
- data/docs/Model-Notes/OS10.md +33 -0
- data/docs/Model-Notes/PanOS_API.md +28 -0
- data/docs/Model-Notes/README.md +2 -0
- data/docs/Sources.md +18 -0
- data/docs/Supported-OS-Types.md +51 -6
- data/docs/Troubleshooting.md +1 -1
- data/extra/gitdiff-msteams.sh +91 -0
- data/extra/nagios_check_failing_nodes.rb +6 -9
- data/extra/oxidized-report-git-commits +71 -14
- data/extra/oxidized.init +2 -5
- data/extra/oxidized.logrotate +1 -0
- data/extra/oxidized.runit +4 -1
- data/extra/oxidized.service +5 -8
- data/extra/rest_client.rb +1 -1
- data/extra/syslog.rb +2 -2
- data/lib/oxidized/cli.rb +1 -1
- data/lib/oxidized/config/vars.rb +5 -2
- data/lib/oxidized/config.rb +6 -3
- data/lib/oxidized/core.rb +1 -1
- data/lib/oxidized/hook/exec.rb +6 -6
- data/lib/oxidized/hook/githubrepo.rb +42 -11
- data/lib/oxidized/hook/slackdiff.rb +2 -2
- data/lib/oxidized/hook/xmppdiff.rb +45 -25
- data/lib/oxidized/hook.rb +4 -8
- data/lib/oxidized/input/exec.rb +1 -1
- data/lib/oxidized/input/input.rb +1 -0
- data/lib/oxidized/input/ssh.rb +23 -20
- data/lib/oxidized/input/telnet.rb +52 -44
- data/lib/oxidized/job.rb +1 -0
- data/lib/oxidized/jobs.rb +11 -6
- data/lib/oxidized/manager.rb +1 -0
- data/lib/oxidized/model/acmepacket.rb +38 -0
- data/lib/oxidized/model/adtran.rb +5 -3
- data/lib/oxidized/model/adva.rb +66 -0
- data/lib/oxidized/model/airfiber.rb +1 -1
- data/lib/oxidized/model/aoscx.rb +96 -0
- data/lib/oxidized/model/aosw.rb +1 -1
- data/lib/oxidized/model/asa.rb +2 -0
- data/lib/oxidized/model/awplus.rb +1 -1
- data/lib/oxidized/model/bdcom.rb +49 -0
- data/lib/oxidized/model/cambiumepmp.rb +17 -0
- data/lib/oxidized/model/casa.rb +4 -1
- data/lib/oxidized/model/ciscoce.rb +12 -0
- data/lib/oxidized/model/ciscosmb.rb +2 -0
- data/lib/oxidized/model/comware.rb +16 -1
- data/lib/oxidized/model/cumulus.rb +58 -44
- data/lib/oxidized/model/dellx.rb +1 -3
- data/lib/oxidized/model/dlink.rb +2 -1
- data/lib/oxidized/model/edgecos.rb +22 -2
- data/lib/oxidized/model/edgeswitch.rb +4 -4
- data/lib/oxidized/model/eltex.rb +48 -0
- data/lib/oxidized/model/enterasys.rb +18 -3
- data/lib/oxidized/model/enterasys800.rb +29 -0
- data/lib/oxidized/model/eos.rb +2 -1
- data/lib/oxidized/model/fabricos.rb +1 -1
- data/lib/oxidized/model/fastiron.rb +3 -2
- data/lib/oxidized/model/fortios.rb +24 -11
- data/lib/oxidized/model/fortiwlc.rb +24 -0
- data/lib/oxidized/model/gaiaos.rb +40 -3
- data/lib/oxidized/model/h3c.rb +40 -0
- data/lib/oxidized/model/hatteras.rb +2 -2
- data/lib/oxidized/model/hios.rb +38 -0
- data/lib/oxidized/model/hpebladesystem.rb +1 -1
- data/lib/oxidized/model/ios.rb +13 -10
- data/lib/oxidized/model/iosxe.rb +1 -1
- data/lib/oxidized/model/ironware.rb +8 -4
- data/lib/oxidized/model/junos.rb +5 -1
- data/lib/oxidized/model/lancom.rb +23 -0
- data/lib/oxidized/model/lenovonos.rb +82 -0
- data/lib/oxidized/model/linksyssrw.rb +71 -0
- data/lib/oxidized/model/mlnxos.rb +2 -0
- data/lib/oxidized/model/model.rb +29 -3
- data/lib/oxidized/model/necix.rb +30 -0
- data/lib/oxidized/model/netgear.rb +5 -2
- data/lib/oxidized/model/netscaler.rb +38 -1
- data/lib/oxidized/model/nodegrid.rb +23 -0
- data/lib/oxidized/model/nxos.rb +3 -2
- data/lib/oxidized/model/openbsd.rb +9 -0
- data/lib/oxidized/model/opengear.rb +1 -1
- data/lib/oxidized/model/opnsense.rb +12 -4
- data/lib/oxidized/model/panos_api.rb +71 -0
- data/lib/oxidized/model/pfsense.rb +12 -7
- data/lib/oxidized/model/powerconnect.rb +1 -3
- data/lib/oxidized/model/procurve.rb +2 -2
- data/lib/oxidized/model/purityos.rb +8 -1
- data/lib/oxidized/model/quantaos.rb +1 -5
- data/lib/oxidized/model/routeros.rb +15 -2
- data/lib/oxidized/model/slxos.rb +1 -0
- data/lib/oxidized/model/smartcs.rb +40 -0
- data/lib/oxidized/model/sonicos.rb +9 -1
- data/lib/oxidized/model/srosmd.rb +97 -0
- data/lib/oxidized/model/stoneos.rb +6 -2
- data/lib/oxidized/model/supermicro.rb +1 -1
- data/lib/oxidized/model/swos.rb +9 -0
- data/lib/oxidized/model/timos.rb +1 -1
- data/lib/oxidized/model/tmos.rb +2 -1
- data/lib/oxidized/model/tplink.rb +2 -0
- data/lib/oxidized/model/trango.rb +11 -11
- data/lib/oxidized/model/truenas.rb +20 -0
- data/lib/oxidized/model/vrp.rb +1 -1
- data/lib/oxidized/model/xos.rb +4 -3
- data/lib/oxidized/model/yamaha.rb +57 -0
- data/lib/oxidized/model/zteolt.rb +52 -0
- data/lib/oxidized/model/zy1308.rb +11 -0
- data/lib/oxidized/node/stats.rb +1 -0
- data/lib/oxidized/node.rb +16 -11
- data/lib/oxidized/nodes.rb +7 -6
- data/lib/oxidized/output/file.rb +2 -1
- data/lib/oxidized/output/git.rb +4 -3
- data/lib/oxidized/output/gitcrypt.rb +5 -8
- data/lib/oxidized/output/http.rb +2 -0
- data/lib/oxidized/source/csv.rb +1 -0
- data/lib/oxidized/source/http.rb +4 -0
- data/lib/oxidized/source/source.rb +7 -2
- data/lib/oxidized/source/sql.rb +15 -5
- data/lib/oxidized/string.rb +9 -3
- data/lib/oxidized/version.rb +2 -2
- data/lib/oxidized/worker.rb +5 -5
- data/oxidized.gemspec +22 -16
- metadata +116 -29
- data/.travis.yml +0 -10
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
class Aoscx < Oxidized::Model
|
|
2
|
+
# previous command is repeated followed by "\eE", which sometimes ends up on last line
|
|
3
|
+
# ssh switches prompt may start with \r, followed by the prompt itself, regex ([\w\s.-]+[#>] ), which ends the line
|
|
4
|
+
# telnet switchs may start with various vt100 control characters, regex (\e\[24;[0-9][hH]), follwed by the prompt, followed
|
|
5
|
+
# by at least 3 other vt100 characters
|
|
6
|
+
prompt /(^\r|\e\[24;[0-9][hH])?([\w\s.-]+[#>] )($|(\e\[24;[0-9][0-9]?[hH]){3})/
|
|
7
|
+
|
|
8
|
+
comment '! '
|
|
9
|
+
|
|
10
|
+
# replace next line control sequence with a new line
|
|
11
|
+
expect /(\e\[1M\e\[\??\d+(;\d+)*[A-Za-z]\e\[1L)|(\eE)/ do |data, re|
|
|
12
|
+
data.gsub re, "\n"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# replace all used vt100 control sequences
|
|
16
|
+
expect /\e\[\??\d+(;\d+)*[A-Za-z]/ do |data, re|
|
|
17
|
+
data.gsub re, ''
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
expect /Press any key to continue(\e\[\??\d+(;\d+)*[A-Za-z])*$/ do
|
|
21
|
+
send ' '
|
|
22
|
+
""
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
expect /Enter switch number/ do
|
|
26
|
+
send "\n"
|
|
27
|
+
""
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
cmd :all do |cfg|
|
|
31
|
+
cfg = cfg.cut_both
|
|
32
|
+
cfg = cfg.gsub /^\r/, ''
|
|
33
|
+
# Additional filtering for elder switches sending vt100 control chars via telnet
|
|
34
|
+
cfg.gsub! /\e\[\??\d+(;\d+)*[A-Za-z]/, ''
|
|
35
|
+
# Additional filtering for power usage reporting which obviously changes over time
|
|
36
|
+
cfg.gsub! /^(.*AC [0-9]{3}V\/?([0-9]{3}V)?) *([0-9]{1,3}) (.*)/, '\\1 <removed> \\4'
|
|
37
|
+
cfg
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
cmd :secret do |cfg|
|
|
41
|
+
cfg.gsub! /^(snmp-server community) \S+(.*)/, '\\1 <secret hidden> \\2'
|
|
42
|
+
cfg.gsub! /^(snmp-server host \S+) \S+(.*)/, '\\1 <secret hidden> \\2'
|
|
43
|
+
cfg.gsub! /^(radius-server host \S+ key) \S+(.*)/, '\\1 <secret hidden> \\2'
|
|
44
|
+
cfg.gsub! /^(radius-server key).*/, '\\1 <configuration removed>'
|
|
45
|
+
cfg.gsub! /^(tacacs-server host \S+ key) \S+(.*)/, '\\1 <secret hidden> \\2'
|
|
46
|
+
cfg.gsub! /^(tacacs-server key).*/, '\\1 <secret hidden>'
|
|
47
|
+
cfg
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
cmd 'show version' do |cfg|
|
|
51
|
+
comment cfg
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
cmd 'show environment' do |cfg|
|
|
55
|
+
cfg.gsub! /^(LC.*\s+)\d+\s+$/, '\\1<hidden>'
|
|
56
|
+
cfg.gsub! /^(\d\/\d\/\d.*\s+)\d+\s+$/, '\\1<hidden>'
|
|
57
|
+
cfg.gsub! /^(\d+\/\S+\s+\S+\s+)\d+\.\d+\s+C(.*)/, '\\1<hidden>\\2'
|
|
58
|
+
cfg.gsub! /^(LC.*\s+)\d+\.\d+\s+(C.*)$/, '\\1 <hidden> \\2'
|
|
59
|
+
comment cfg
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
cmd 'show module' do |cfg|
|
|
63
|
+
comment cfg
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
cmd 'show interface transceiver' do |cfg|
|
|
67
|
+
comment cfg
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
cmd 'show system | exclude "Up Time" | exclude "CPU" | exclude "Memory"' do |cfg|
|
|
71
|
+
comment cfg
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
cmd 'show running-config'
|
|
75
|
+
|
|
76
|
+
cfg :telnet do
|
|
77
|
+
username /Username:/
|
|
78
|
+
password /Password:/
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
cfg :telnet, :ssh do
|
|
82
|
+
# preferred way to handle additional passwords
|
|
83
|
+
if vars :enable
|
|
84
|
+
post_login do
|
|
85
|
+
send "enable\n"
|
|
86
|
+
cmd vars(:enable)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
post_login 'no page'
|
|
90
|
+
pre_logout "exit"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
cfg :ssh do
|
|
94
|
+
pty_options(chars_wide: 1000)
|
|
95
|
+
end
|
|
96
|
+
end
|
data/lib/oxidized/model/aosw.rb
CHANGED
|
@@ -39,7 +39,7 @@ class AOSW < Oxidized::Model
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
cmd 'show version' do |cfg|
|
|
42
|
-
cfg = cfg.each_line.reject { |line| line.match
|
|
42
|
+
cfg = cfg.each_line.reject { |line| line.match(/(Switch|AP) uptime/i) || line.match(/Reboot Time and Cause/i) }
|
|
43
43
|
rstrip_cfg comment cfg.join
|
|
44
44
|
end
|
|
45
45
|
|
data/lib/oxidized/model/asa.rb
CHANGED
|
@@ -34,6 +34,8 @@ class ASA < Oxidized::Model
|
|
|
34
34
|
# avoid commits due to uptime / ixo-router01 up 2 mins 28 secs / ixo-router01 up 1 days 2 hours
|
|
35
35
|
cfg = cfg.each_line.reject { |line| line.match /(\s+up\s+\d+\s+)|(.*days.*)/ }
|
|
36
36
|
cfg = cfg.join
|
|
37
|
+
cfg.gsub! /^Configuration has not been modified since last system restart.*\n/, ''
|
|
38
|
+
cfg.gsub! /^Configuration last modified by.*\n/, ''
|
|
37
39
|
comment cfg
|
|
38
40
|
end
|
|
39
41
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class BDCOM < Oxidized::Model
|
|
2
|
+
comment '! '
|
|
3
|
+
|
|
4
|
+
cmd :secret do |cfg|
|
|
5
|
+
cfg.gsub!(/password \d+ (\S+).*/, '<secret removed>')
|
|
6
|
+
cfg.gsub!(/community (\S+)/, 'community <hidden>')
|
|
7
|
+
cfg
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
cmd :all do |cfg|
|
|
11
|
+
cfg.each_line.to_a[0..-2].join
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
cmd 'show running-config'
|
|
15
|
+
|
|
16
|
+
cmd 'show version' do |cfg|
|
|
17
|
+
cfg.gsub! /(\s*uptime is\s*)[0-9:]+/, '\1 <removed>'
|
|
18
|
+
cfg.gsub! /(\s*current time:\s*)[0-9-]+\s+[0-9:]+/, '\1 <removed>'
|
|
19
|
+
cfg.gsub! /(\s*at)\s+[0-9-]+\s+[0-9:]+(,\s*uptime\s+[0-9:]+)?/, '\1 <removed>'
|
|
20
|
+
comment cfg
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
cmd 'show power-status' do |cfg|
|
|
24
|
+
comment cfg
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
cmd 'show fan-status' do |cfg|
|
|
28
|
+
comment cfg
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
cfg :telnet do
|
|
32
|
+
username /^Username:/
|
|
33
|
+
password /^Password:/
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
cfg :telnet, :ssh do
|
|
37
|
+
post_login do
|
|
38
|
+
if vars(:enable) == true
|
|
39
|
+
cmd "enable"
|
|
40
|
+
elsif vars(:enable)
|
|
41
|
+
cmd "enable", /^[pP]assword:/
|
|
42
|
+
cmd vars(:enable)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
post_login 'terminal length 0'
|
|
47
|
+
pre_logout 'exit'
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/oxidized/model/casa.rb
CHANGED
|
@@ -10,6 +10,7 @@ class Casa < Oxidized::Model
|
|
|
10
10
|
cfg.gsub! /^(console-password encrypted) \S+/, '\\1 <secret hidden>'
|
|
11
11
|
cfg.gsub! /^(password encrypted) \S+/, '\\1 <secret hidden>'
|
|
12
12
|
cfg.gsub! /^(tacacs-server key) \S+/, '\\1 <secret hidden>'
|
|
13
|
+
cfg.gsub! /^( ip rip authentication secret) \S+/, '\\1 <secret hidden>'
|
|
13
14
|
cfg
|
|
14
15
|
end
|
|
15
16
|
|
|
@@ -18,7 +19,9 @@ class Casa < Oxidized::Model
|
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
cmd 'show system' do |cfg|
|
|
21
|
-
|
|
22
|
+
cfg.gsub! /Uptime:.*/, 'Uptime: <removed>'
|
|
23
|
+
cfg.gsub! /Time:.*/, 'Time: <removed>'
|
|
24
|
+
comment cfg
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
cmd 'show version' do |cfg|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Supporting Cisco Catalyst Express Switches and IOS using the basic web interface
|
|
2
|
+
class CiscoCE < Oxidized::Model
|
|
3
|
+
cmd "/level/15/exec/-/show/startup-config" do |cfg|
|
|
4
|
+
output = cfg.gsub(/\A.+<DL>(.+)<\/DL>.+\z/m, '\1') # Strip configuration file from within HTML response.
|
|
5
|
+
output
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
cfg :http do
|
|
9
|
+
@username = @node.auth[:username]
|
|
10
|
+
@password = @node.auth[:password]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -31,6 +31,15 @@ class Comware < Oxidized::Model
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
cfg :telnet, :ssh do
|
|
34
|
+
# handle enable passwords
|
|
35
|
+
post_login do
|
|
36
|
+
if vars(:enable) == true
|
|
37
|
+
cmd "super"
|
|
38
|
+
elsif vars(:enable)
|
|
39
|
+
cmd "super", /^ [pP]assword:/
|
|
40
|
+
cmd vars(:enable)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
34
43
|
# enable command-line mode on SMB comware switches (HP V1910, V1920)
|
|
35
44
|
# autodetection is hard, because the 'summary' command is paged, and
|
|
36
45
|
# the pager cannot be disabled before _cmdline-mode on.
|
|
@@ -41,10 +50,16 @@ class Comware < Oxidized::Model
|
|
|
41
50
|
cmd 'y', /(#{@node.prompt}|input password)/
|
|
42
51
|
cmd vars(:comware_cmdline)
|
|
43
52
|
|
|
44
|
-
# HP V1950
|
|
53
|
+
# HP V1950 r2432P06
|
|
45
54
|
cmd 'xtd-cli-mode on', /(#{@node.prompt}|Continue)/
|
|
46
55
|
cmd 'y', /(#{@node.prompt}|input password)/
|
|
47
56
|
cmd vars(:comware_cmdline)
|
|
57
|
+
|
|
58
|
+
# HP V1950 OS r3208 (v7.1)
|
|
59
|
+
# HPE Office Connect 1950
|
|
60
|
+
cmd 'xtd-cli-mode', /(#{@node.prompt}|Continue|Switch)/
|
|
61
|
+
cmd 'y', /(#{@node.prompt}|input password|Password:)/
|
|
62
|
+
cmd vars(:comware_cmdline)
|
|
48
63
|
end
|
|
49
64
|
end
|
|
50
65
|
|
|
@@ -11,72 +11,86 @@ class Cumulus < Oxidized::Model
|
|
|
11
11
|
cfg.cut_both
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
cmd :secret do |cfg|
|
|
15
|
+
cfg.gsub! /password (\S+)/, 'password <hidden>'
|
|
16
|
+
cfg
|
|
17
|
+
end
|
|
18
|
+
|
|
14
19
|
# show the persistent configuration
|
|
15
20
|
pre do
|
|
16
|
-
|
|
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
|
|
21
|
+
use_nclu = vars(:cumulus_use_nclu) || false
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
if use_nclu
|
|
24
|
+
cfg = cmd 'net show configuration commands'
|
|
25
|
+
else
|
|
26
|
+
# Set FRR or Quagga in config
|
|
27
|
+
routing_daemon = vars(:cumulus_routing_daemon) ? vars(:cumulus_routing_daemon).downcase : 'quagga'
|
|
28
|
+
routing_conf_file = routing_daemon == 'frr' ? 'frr.conf' : 'Quagga.conf'
|
|
29
|
+
routing_daemon_shout = routing_daemon.upcase
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
cfg = add_comment 'THE HOSTNAME'
|
|
32
|
+
cfg += cmd 'cat /etc/hostname'
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
cfg += add_comment 'THE HOSTS'
|
|
35
|
+
cfg += cmd 'cat /etc/hosts'
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
cfg += add_comment 'THE INTERFACES'
|
|
38
|
+
cfg += cmd 'grep -r "" /etc/network/interface* | cut -d "/" -f 4-'
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
cfg += add_comment 'RESOLV.CONF'
|
|
41
|
+
cfg += cmd 'cat /etc/resolv.conf'
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
cfg += add_comment 'NTP.CONF'
|
|
44
|
+
cfg += cmd 'cat /etc/ntp.conf'
|
|
38
45
|
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
cfg += add_comment 'SNMP settings'
|
|
47
|
+
cfg += cmd 'cat /etc/snmp/snmpd.conf'
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
cfg += add_comment "#{routing_daemon_shout} DAEMONS"
|
|
50
|
+
cfg += cmd "cat /etc/#{routing_daemon}/daemons"
|
|
44
51
|
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
cfg += add_comment "#{routing_daemon_shout} ZEBRA"
|
|
53
|
+
cfg += cmd "cat /etc/#{routing_daemon}/zebra.conf"
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
cfg += add_comment "#{routing_daemon_shout} BGP"
|
|
56
|
+
cfg += cmd "cat /etc/#{routing_daemon}/bgpd.conf"
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
cfg += add_comment "#{routing_daemon_shout} OSPF"
|
|
59
|
+
cfg += cmd "cat /etc/#{routing_daemon}/ospfd.conf"
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
cfg += add_comment "#{routing_daemon_shout} OSPF6"
|
|
62
|
+
cfg += cmd "cat /etc/#{routing_daemon}/ospf6d.conf"
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
cfg += add_comment "#{routing_daemon_shout} CONF"
|
|
65
|
+
cfg += cmd "cat /etc/#{routing_daemon}/#{routing_conf_file}"
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
|
|
67
|
+
cfg += add_comment 'MOTD'
|
|
68
|
+
cfg += cmd 'cat /etc/motd'
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
cfg += add_comment 'PASSWD'
|
|
71
|
+
cfg += cmd 'cat /etc/passwd'
|
|
65
72
|
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
cfg += add_comment 'SWITCHD'
|
|
74
|
+
cfg += cmd 'cat /etc/cumulus/switchd.conf'
|
|
68
75
|
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
cfg += add_comment 'PORTS'
|
|
77
|
+
cfg += cmd 'cat /etc/cumulus/ports.conf'
|
|
71
78
|
|
|
72
|
-
|
|
73
|
-
|
|
79
|
+
cfg += add_comment 'TRAFFIC'
|
|
80
|
+
cfg += cmd 'cat /etc/cumulus/datapath/traffic.conf'
|
|
74
81
|
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
cfg += add_comment 'ACL'
|
|
83
|
+
cfg += cmd 'cat /etc/cumulus/acl/policy.conf'
|
|
77
84
|
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
cfg += add_comment 'DHCP-RELAY'
|
|
86
|
+
cfg += cmd 'cat /etc/default/isc-dhcp-relay'
|
|
87
|
+
|
|
88
|
+
cfg += add_comment 'VERSION'
|
|
89
|
+
cfg += cmd 'cat /etc/cumulus/etc.replace/os-release'
|
|
90
|
+
|
|
91
|
+
cfg += add_comment 'License'
|
|
92
|
+
cfg += cmd 'cl-license'
|
|
93
|
+
end
|
|
80
94
|
|
|
81
95
|
cfg
|
|
82
96
|
end
|
data/lib/oxidized/model/dellx.rb
CHANGED
|
@@ -20,9 +20,7 @@ class DellX < Oxidized::Model
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
cmd 'show version' do |cfg|
|
|
23
|
-
if @stackable.nil?
|
|
24
|
-
@stackable = true if cfg =~ /(U|u)nit\s/
|
|
25
|
-
end
|
|
23
|
+
@stackable = true if @stackable.nil? && (cfg =~ /(U|u)nit\s/)
|
|
26
24
|
cfg = cfg.split("\n").reject { |line| line[/Up\sTime/] }
|
|
27
25
|
comment cfg.join("\n") + "\n"
|
|
28
26
|
end
|
data/lib/oxidized/model/dlink.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
class Dlink < Oxidized::Model
|
|
2
2
|
# D-LINK Switches
|
|
3
|
+
# Add support dgs 1100 series (tested only with dgs-1100-10/me)
|
|
3
4
|
|
|
4
5
|
prompt /^(\r*[\w\s.@()\/:-]+[#>]\s?)$/
|
|
5
6
|
comment '# '
|
|
@@ -26,7 +27,7 @@ class Dlink < Oxidized::Model
|
|
|
26
27
|
cmd 'show config current'
|
|
27
28
|
|
|
28
29
|
cfg :telnet do
|
|
29
|
-
username /\r*[Uu]ser[Nn]ame:/
|
|
30
|
+
username /\r*([\w\s.@()\/:-]+)?([Uu]ser[Nn]ame|[Ll]ogin):/
|
|
30
31
|
password /\r*[Pp]ass[Ww]ord:/
|
|
31
32
|
end
|
|
32
33
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
class EdgeCOS < Oxidized::Model
|
|
2
2
|
comment '! '
|
|
3
3
|
|
|
4
|
+
# Handle pager for ES3526XA-V2
|
|
5
|
+
expect /^---More---.*$/ do |data, re|
|
|
6
|
+
send ' '
|
|
7
|
+
data.sub re, ''
|
|
8
|
+
end
|
|
9
|
+
|
|
4
10
|
cmd :secret do |cfg|
|
|
5
11
|
cfg.gsub!(/password \d+ (\S+).*/, '<secret removed>')
|
|
6
12
|
cfg.gsub!(/community (\S+)/, 'community <hidden>')
|
|
@@ -8,10 +14,18 @@ class EdgeCOS < Oxidized::Model
|
|
|
8
14
|
end
|
|
9
15
|
|
|
10
16
|
cmd :all do |cfg|
|
|
11
|
-
|
|
17
|
+
# Do not show errors for commands that are not supported on some devices
|
|
18
|
+
cfg.gsub! /^(% Invalid input detected at '\^' marker\.|^\s+\^)$/, ''
|
|
19
|
+
# Handle pager for ES3526XA-V2
|
|
20
|
+
cfg.gsub! /^([\b]{10}\s{10}[\b]{10})/, ''
|
|
21
|
+
cfg.cut_both
|
|
12
22
|
end
|
|
13
23
|
|
|
14
|
-
cmd 'show running-config'
|
|
24
|
+
cmd 'show running-config' do |cfg|
|
|
25
|
+
# Remove "building running-config, please wait..." message
|
|
26
|
+
cfg.gsub! /^Building running configuration.*\n/, ''
|
|
27
|
+
cfg.cut_head
|
|
28
|
+
end
|
|
15
29
|
|
|
16
30
|
cmd 'show system' do |cfg|
|
|
17
31
|
cfg.gsub! /^.*\sUp Time\s*:.*\n/i, ''
|
|
@@ -20,6 +34,7 @@ class EdgeCOS < Oxidized::Model
|
|
|
20
34
|
end
|
|
21
35
|
|
|
22
36
|
cmd 'show version' do |cfg|
|
|
37
|
+
cfg.gsub! /^.*\suptime is.*\n/i, ''
|
|
23
38
|
comment cfg
|
|
24
39
|
end
|
|
25
40
|
|
|
@@ -43,7 +58,12 @@ class EdgeCOS < Oxidized::Model
|
|
|
43
58
|
end
|
|
44
59
|
|
|
45
60
|
cfg :telnet, :ssh do
|
|
61
|
+
post_login do
|
|
62
|
+
send "enable\n" if vars(:enable) == true
|
|
63
|
+
end
|
|
46
64
|
post_login 'terminal length 0'
|
|
65
|
+
post_login 'terminal width 300'
|
|
66
|
+
pre_logout 'exit' if vars(:enable) == true
|
|
47
67
|
pre_logout 'exit'
|
|
48
68
|
end
|
|
49
69
|
end
|
|
@@ -16,11 +16,11 @@ class EdgeSwitch < Oxidized::Model
|
|
|
16
16
|
|
|
17
17
|
cfg :telnet, :ssh do
|
|
18
18
|
post_login do
|
|
19
|
-
if vars
|
|
20
|
-
|
|
19
|
+
if vars(:enable) == true
|
|
20
|
+
cmd "enable"
|
|
21
|
+
elsif vars(:enable)
|
|
22
|
+
cmd "enable", /^[pP]assword:/
|
|
21
23
|
cmd vars(:enable)
|
|
22
|
-
else
|
|
23
|
-
cmd 'enable'
|
|
24
24
|
end
|
|
25
25
|
cmd 'terminal length 0'
|
|
26
26
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class Eltex < Oxidized::Model
|
|
2
|
+
# Tested with MES2324FB Version: 4.0.7.1 Build: 37 (master)
|
|
3
|
+
|
|
4
|
+
prompt /^\s?[\w.@\(\)-]+[#>]\s?$/
|
|
5
|
+
comment '! '
|
|
6
|
+
|
|
7
|
+
cmd :all do |cfg|
|
|
8
|
+
cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, ''
|
|
9
|
+
cfg.cut_both
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
cmd :secret do |cfg|
|
|
13
|
+
cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
|
|
14
|
+
cfg.gsub! /^(enable (password|secret)( level \d+)? \d) .+/, '\\1 <secret hidden>'
|
|
15
|
+
cfg.gsub! /^(\s+(?:password|secret)) (?:\d )?\S+/, '\\1 <secret hidden>'
|
|
16
|
+
cfg.gsub! /^(tacacs-server (.+ )?key) .+/, '\\1 <secret hidden>'
|
|
17
|
+
cfg.gsub! /^((tacacs|radius) server [^\n]+\n(\s+[^\n]+\n)*\s+key) [^\n]+$/m, '\1 <secret hidden>'
|
|
18
|
+
cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>'
|
|
19
|
+
cfg.gsub! /^username \S+ password \d \S+/, '<secret hidden>'
|
|
20
|
+
cfg.gsub! /^enable password \d \S+/, '<secret hidden>'
|
|
21
|
+
cfg.gsub! /wpa-psk ascii \d \S+/, '<secret hidden>'
|
|
22
|
+
cfg
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
cmd 'show running-config' do |cfg|
|
|
26
|
+
cfg
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
cfg :telnet do
|
|
30
|
+
username /^(User Name):/
|
|
31
|
+
password /^Password:/
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
cfg :telnet, :ssh do
|
|
35
|
+
# preferred way to handle additional passwords
|
|
36
|
+
post_login do
|
|
37
|
+
if vars(:enable) == true
|
|
38
|
+
cmd "enable"
|
|
39
|
+
elsif vars(:enable)
|
|
40
|
+
cmd "enable", /^[pP]assword:/
|
|
41
|
+
cmd vars(:enable)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
post_login 'terminal datadump'
|
|
45
|
+
pre_logout 'disable'
|
|
46
|
+
pre_logout 'exit'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
class Enterasys < Oxidized::Model
|
|
2
2
|
# Enterasys B3/C3 models #
|
|
3
3
|
|
|
4
|
-
prompt /^.+\w\(su\)->\s?$/
|
|
4
|
+
prompt /^.+\w\((su|rw)\)->\s?$/
|
|
5
5
|
|
|
6
|
-
comment
|
|
6
|
+
comment '!'
|
|
7
|
+
|
|
8
|
+
# Handle paging
|
|
9
|
+
expect /^--More--.*$/ do |data, re|
|
|
10
|
+
send ' '
|
|
11
|
+
data.sub re, ''
|
|
12
|
+
end
|
|
7
13
|
|
|
8
14
|
cmd :all do |cfg|
|
|
9
15
|
cfg.each_line.to_a[2..-3].map { |line| line.delete("\r").rstrip }.join("\n") + "\n"
|
|
@@ -13,6 +19,10 @@ class Enterasys < Oxidized::Model
|
|
|
13
19
|
comment cfg
|
|
14
20
|
end
|
|
15
21
|
|
|
22
|
+
cmd 'show version' do |cfg|
|
|
23
|
+
comment cfg
|
|
24
|
+
end
|
|
25
|
+
|
|
16
26
|
cmd 'show config' do |cfg|
|
|
17
27
|
cfg.gsub! /^This command shows non-default configurations only./, ''
|
|
18
28
|
cfg.gsub! /^Use 'show config all' to show both default and non-default configurations./, ''
|
|
@@ -22,7 +32,12 @@ class Enterasys < Oxidized::Model
|
|
|
22
32
|
cfg
|
|
23
33
|
end
|
|
24
34
|
|
|
25
|
-
cfg :
|
|
35
|
+
cfg :telnet do
|
|
36
|
+
username /^Username:/i
|
|
37
|
+
password /^Password:/i
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
cfg :telnet, :ssh do
|
|
26
41
|
pre_logout 'exit'
|
|
27
42
|
end
|
|
28
43
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class Enterasys800 < Oxidized::Model
|
|
2
|
+
# Enterasys 800 models #
|
|
3
|
+
# Tested with 08H20G4-24 Fast Ethernet Switch Firmware: Build 01.01.01.0017
|
|
4
|
+
comment '# '
|
|
5
|
+
|
|
6
|
+
prompt /([\w \(:.@-]+[#>]\s?)$/
|
|
7
|
+
|
|
8
|
+
cfg :telnet do
|
|
9
|
+
username /UserName:/
|
|
10
|
+
password /PassWord:/
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
cfg :telnet do
|
|
14
|
+
post_login 'disable clipaging'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
cfg :telnet do
|
|
18
|
+
pre_logout 'logout'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
cmd :all do |cfg|
|
|
22
|
+
cfg = cfg.cut_both
|
|
23
|
+
cfg = cfg.gsub /^[\r\n]|^\s\s\s/, ''
|
|
24
|
+
cfg = cfg.gsub /Command: show config effective/, ''
|
|
25
|
+
cfg
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
cmd 'show config effective'
|
|
29
|
+
end
|
data/lib/oxidized/model/eos.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class EOS < Oxidized::Model
|
|
2
2
|
# Arista EOS model #
|
|
3
3
|
|
|
4
|
-
prompt /^.+[#>]
|
|
4
|
+
prompt /^.+[#>]$/
|
|
5
5
|
|
|
6
6
|
comment '! '
|
|
7
7
|
|
|
@@ -14,6 +14,7 @@ class EOS < Oxidized::Model
|
|
|
14
14
|
cfg.gsub! /(secret \w+) (\S+).*/, '\\1 <secret hidden>'
|
|
15
15
|
cfg.gsub! /(password \d+) (\S+).*/, '\\1 <secret hidden>'
|
|
16
16
|
cfg.gsub! /^(enable secret).*/, '\\1 <configuration removed>'
|
|
17
|
+
cfg.gsub! /^(service unsupported-transceiver).*/, '\\1 <license key removed>'
|
|
17
18
|
cfg.gsub! /^(tacacs-server key \d+).*/, '\\1 <configuration removed>'
|
|
18
19
|
cfg.gsub! /( {6}key) (\h+ 7) (\h+).*/, '\\1 <secret hidden>'
|
|
19
20
|
cfg
|
|
@@ -6,7 +6,7 @@ class FabricOS < Oxidized::Model
|
|
|
6
6
|
comment '# '
|
|
7
7
|
|
|
8
8
|
cmd 'chassisShow' do |cfg|
|
|
9
|
-
comment cfg.each_line.reject { |line| line.match(/Time Awake:/) || line.match(/Power Usage \(Watts\):/) || line.match(/Time Alive:/) || line.match(/Update:/) }.join
|
|
9
|
+
comment cfg.each_line.reject { |line| line.match(/Time Awake:/) || line.match(/Power Usage \(Watts\):/) || line.match(/Power Usage:/) || line.match(/Time Alive:/) || line.match(/Update:/) }.join
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
cmd 'configShow -all' do |cfg|
|