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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/publishdocker.yml +8 -1
  3. data/.github/workflows/ruby.yml +42 -0
  4. data/.rubocop.yml +30 -10
  5. data/.rubocop_todo.yml +95 -41
  6. data/CHANGELOG.md +139 -2
  7. data/Dockerfile +13 -9
  8. data/README.md +66 -32
  9. data/Rakefile +2 -0
  10. data/docs/Configuration.md +49 -7
  11. data/docs/Creating-Models.md +10 -4
  12. data/docs/Hooks.md +35 -6
  13. data/docs/Model-Notes/ADVA.md +12 -0
  14. data/docs/Model-Notes/Cumulus.md +7 -1
  15. data/docs/Model-Notes/IOS.md +36 -0
  16. data/docs/Model-Notes/JunOS.md +3 -3
  17. data/docs/Model-Notes/LenovoNOS.md +29 -0
  18. data/docs/Model-Notes/LinksysSRW.md +15 -0
  19. data/docs/Model-Notes/Nokia.md +3 -0
  20. data/docs/Model-Notes/OS10.md +33 -0
  21. data/docs/Model-Notes/PanOS_API.md +28 -0
  22. data/docs/Model-Notes/README.md +2 -0
  23. data/docs/Sources.md +18 -0
  24. data/docs/Supported-OS-Types.md +51 -6
  25. data/docs/Troubleshooting.md +1 -1
  26. data/extra/gitdiff-msteams.sh +91 -0
  27. data/extra/nagios_check_failing_nodes.rb +6 -9
  28. data/extra/oxidized-report-git-commits +71 -14
  29. data/extra/oxidized.init +2 -5
  30. data/extra/oxidized.logrotate +1 -0
  31. data/extra/oxidized.runit +4 -1
  32. data/extra/oxidized.service +5 -8
  33. data/extra/rest_client.rb +1 -1
  34. data/extra/syslog.rb +2 -2
  35. data/lib/oxidized/cli.rb +1 -1
  36. data/lib/oxidized/config/vars.rb +5 -2
  37. data/lib/oxidized/config.rb +6 -3
  38. data/lib/oxidized/core.rb +1 -1
  39. data/lib/oxidized/hook/exec.rb +6 -6
  40. data/lib/oxidized/hook/githubrepo.rb +42 -11
  41. data/lib/oxidized/hook/slackdiff.rb +2 -2
  42. data/lib/oxidized/hook/xmppdiff.rb +45 -25
  43. data/lib/oxidized/hook.rb +4 -8
  44. data/lib/oxidized/input/exec.rb +1 -1
  45. data/lib/oxidized/input/input.rb +1 -0
  46. data/lib/oxidized/input/ssh.rb +23 -20
  47. data/lib/oxidized/input/telnet.rb +52 -44
  48. data/lib/oxidized/job.rb +1 -0
  49. data/lib/oxidized/jobs.rb +11 -6
  50. data/lib/oxidized/manager.rb +1 -0
  51. data/lib/oxidized/model/acmepacket.rb +38 -0
  52. data/lib/oxidized/model/adtran.rb +5 -3
  53. data/lib/oxidized/model/adva.rb +66 -0
  54. data/lib/oxidized/model/airfiber.rb +1 -1
  55. data/lib/oxidized/model/aoscx.rb +96 -0
  56. data/lib/oxidized/model/aosw.rb +1 -1
  57. data/lib/oxidized/model/asa.rb +2 -0
  58. data/lib/oxidized/model/awplus.rb +1 -1
  59. data/lib/oxidized/model/bdcom.rb +49 -0
  60. data/lib/oxidized/model/cambiumepmp.rb +17 -0
  61. data/lib/oxidized/model/casa.rb +4 -1
  62. data/lib/oxidized/model/ciscoce.rb +12 -0
  63. data/lib/oxidized/model/ciscosmb.rb +2 -0
  64. data/lib/oxidized/model/comware.rb +16 -1
  65. data/lib/oxidized/model/cumulus.rb +58 -44
  66. data/lib/oxidized/model/dellx.rb +1 -3
  67. data/lib/oxidized/model/dlink.rb +2 -1
  68. data/lib/oxidized/model/edgecos.rb +22 -2
  69. data/lib/oxidized/model/edgeswitch.rb +4 -4
  70. data/lib/oxidized/model/eltex.rb +48 -0
  71. data/lib/oxidized/model/enterasys.rb +18 -3
  72. data/lib/oxidized/model/enterasys800.rb +29 -0
  73. data/lib/oxidized/model/eos.rb +2 -1
  74. data/lib/oxidized/model/fabricos.rb +1 -1
  75. data/lib/oxidized/model/fastiron.rb +3 -2
  76. data/lib/oxidized/model/fortios.rb +24 -11
  77. data/lib/oxidized/model/fortiwlc.rb +24 -0
  78. data/lib/oxidized/model/gaiaos.rb +40 -3
  79. data/lib/oxidized/model/h3c.rb +40 -0
  80. data/lib/oxidized/model/hatteras.rb +2 -2
  81. data/lib/oxidized/model/hios.rb +38 -0
  82. data/lib/oxidized/model/hpebladesystem.rb +1 -1
  83. data/lib/oxidized/model/ios.rb +13 -10
  84. data/lib/oxidized/model/iosxe.rb +1 -1
  85. data/lib/oxidized/model/ironware.rb +8 -4
  86. data/lib/oxidized/model/junos.rb +5 -1
  87. data/lib/oxidized/model/lancom.rb +23 -0
  88. data/lib/oxidized/model/lenovonos.rb +82 -0
  89. data/lib/oxidized/model/linksyssrw.rb +71 -0
  90. data/lib/oxidized/model/mlnxos.rb +2 -0
  91. data/lib/oxidized/model/model.rb +29 -3
  92. data/lib/oxidized/model/necix.rb +30 -0
  93. data/lib/oxidized/model/netgear.rb +5 -2
  94. data/lib/oxidized/model/netscaler.rb +38 -1
  95. data/lib/oxidized/model/nodegrid.rb +23 -0
  96. data/lib/oxidized/model/nxos.rb +3 -2
  97. data/lib/oxidized/model/openbsd.rb +9 -0
  98. data/lib/oxidized/model/opengear.rb +1 -1
  99. data/lib/oxidized/model/opnsense.rb +12 -4
  100. data/lib/oxidized/model/panos_api.rb +71 -0
  101. data/lib/oxidized/model/pfsense.rb +12 -7
  102. data/lib/oxidized/model/powerconnect.rb +1 -3
  103. data/lib/oxidized/model/procurve.rb +2 -2
  104. data/lib/oxidized/model/purityos.rb +8 -1
  105. data/lib/oxidized/model/quantaos.rb +1 -5
  106. data/lib/oxidized/model/routeros.rb +15 -2
  107. data/lib/oxidized/model/slxos.rb +1 -0
  108. data/lib/oxidized/model/smartcs.rb +40 -0
  109. data/lib/oxidized/model/sonicos.rb +9 -1
  110. data/lib/oxidized/model/srosmd.rb +97 -0
  111. data/lib/oxidized/model/stoneos.rb +6 -2
  112. data/lib/oxidized/model/supermicro.rb +1 -1
  113. data/lib/oxidized/model/swos.rb +9 -0
  114. data/lib/oxidized/model/timos.rb +1 -1
  115. data/lib/oxidized/model/tmos.rb +2 -1
  116. data/lib/oxidized/model/tplink.rb +2 -0
  117. data/lib/oxidized/model/trango.rb +11 -11
  118. data/lib/oxidized/model/truenas.rb +20 -0
  119. data/lib/oxidized/model/vrp.rb +1 -1
  120. data/lib/oxidized/model/xos.rb +4 -3
  121. data/lib/oxidized/model/yamaha.rb +57 -0
  122. data/lib/oxidized/model/zteolt.rb +52 -0
  123. data/lib/oxidized/model/zy1308.rb +11 -0
  124. data/lib/oxidized/node/stats.rb +1 -0
  125. data/lib/oxidized/node.rb +16 -11
  126. data/lib/oxidized/nodes.rb +7 -6
  127. data/lib/oxidized/output/file.rb +2 -1
  128. data/lib/oxidized/output/git.rb +4 -3
  129. data/lib/oxidized/output/gitcrypt.rb +5 -8
  130. data/lib/oxidized/output/http.rb +2 -0
  131. data/lib/oxidized/source/csv.rb +1 -0
  132. data/lib/oxidized/source/http.rb +4 -0
  133. data/lib/oxidized/source/source.rb +7 -2
  134. data/lib/oxidized/source/sql.rb +15 -5
  135. data/lib/oxidized/string.rb +9 -3
  136. data/lib/oxidized/version.rb +2 -2
  137. data/lib/oxidized/worker.rb +5 -5
  138. data/oxidized.gemspec +22 -16
  139. metadata +116 -29
  140. 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
@@ -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 /(Switch|AP) uptime/i }
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
 
@@ -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
 
@@ -51,7 +51,7 @@ class AWPlus < Oxidized::Model
51
51
  line.match(/Current software\s*:.*/) ||
52
52
  line.match(/Software version\s*:.*/) ||
53
53
  line.match(/Build date\s*:.*/)
54
- } .join
54
+ }.join
55
55
  end
56
56
 
57
57
  # Actually get the devices running config#
@@ -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
@@ -0,0 +1,17 @@
1
+ class CambiumePMP < Oxidized::Model
2
+ # Cambium ePMP Radios
3
+
4
+ prompt /.*>/
5
+
6
+ cmd :all do |cfg|
7
+ cfg.cut_both
8
+ end
9
+
10
+ pre do
11
+ cmd 'config show json'
12
+ end
13
+
14
+ cfg :ssh do
15
+ pre_logout 'exit'
16
+ end
17
+ end
@@ -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
- comment cfg.each_line.reject { |line| line.match /^\s+System (Time|Uptime): / }.join
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
@@ -26,6 +26,8 @@ class CiscoSMB < Oxidized::Model
26
26
  end
27
27
 
28
28
  cmd 'show version' do |cfg|
29
+ cfg.gsub! /.*Uptime for this control.*/, ''
30
+ cfg.gsub! /.*System restarted.*/, ''
29
31
  cfg.gsub! /uptime is\ .+/, '<uptime removed>'
30
32
  comment cfg
31
33
  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
- # 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
21
+ use_nclu = vars(:cumulus_use_nclu) || false
20
22
 
21
- cfg = add_comment 'THE HOSTNAME'
22
- cfg += cmd 'cat /etc/hostname'
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
- cfg += add_comment 'THE HOSTS'
25
- cfg += cmd 'cat /etc/hosts'
31
+ cfg = add_comment 'THE HOSTNAME'
32
+ cfg += cmd 'cat /etc/hostname'
26
33
 
27
- cfg += add_comment 'THE INTERFACES'
28
- cfg += cmd 'grep -r "" /etc/network/interface* | cut -d "/" -f 4-'
34
+ cfg += add_comment 'THE HOSTS'
35
+ cfg += cmd 'cat /etc/hosts'
29
36
 
30
- cfg += add_comment 'RESOLV.CONF'
31
- cfg += cmd 'cat /etc/resolv.conf'
37
+ cfg += add_comment 'THE INTERFACES'
38
+ cfg += cmd 'grep -r "" /etc/network/interface* | cut -d "/" -f 4-'
32
39
 
33
- cfg += add_comment 'NTP.CONF'
34
- cfg += cmd 'cat /etc/ntp.conf'
40
+ cfg += add_comment 'RESOLV.CONF'
41
+ cfg += cmd 'cat /etc/resolv.conf'
35
42
 
36
- cfg += add_comment 'SNMP settings'
37
- cfg += cmd 'cat /etc/snmp/snmpd.conf'
43
+ cfg += add_comment 'NTP.CONF'
44
+ cfg += cmd 'cat /etc/ntp.conf'
38
45
 
39
- cfg += add_comment "#{routing_daemon_shout} DAEMONS"
40
- cfg += cmd "cat /etc/#{routing_daemon}/daemons"
46
+ cfg += add_comment 'SNMP settings'
47
+ cfg += cmd 'cat /etc/snmp/snmpd.conf'
41
48
 
42
- cfg += add_comment "#{routing_daemon_shout} ZEBRA"
43
- cfg += cmd "cat /etc/#{routing_daemon}/zebra.conf"
49
+ cfg += add_comment "#{routing_daemon_shout} DAEMONS"
50
+ cfg += cmd "cat /etc/#{routing_daemon}/daemons"
44
51
 
45
- cfg += add_comment "#{routing_daemon_shout} BGP"
46
- cfg += cmd "cat /etc/#{routing_daemon}/bgpd.conf"
52
+ cfg += add_comment "#{routing_daemon_shout} ZEBRA"
53
+ cfg += cmd "cat /etc/#{routing_daemon}/zebra.conf"
47
54
 
48
- cfg += add_comment "#{routing_daemon_shout} OSPF"
49
- cfg += cmd "cat /etc/#{routing_daemon}/ospfd.conf"
55
+ cfg += add_comment "#{routing_daemon_shout} BGP"
56
+ cfg += cmd "cat /etc/#{routing_daemon}/bgpd.conf"
50
57
 
51
- cfg += add_comment "#{routing_daemon_shout} OSPF6"
52
- cfg += cmd "cat /etc/#{routing_daemon}/ospf6d.conf"
58
+ cfg += add_comment "#{routing_daemon_shout} OSPF"
59
+ cfg += cmd "cat /etc/#{routing_daemon}/ospfd.conf"
53
60
 
54
- cfg += add_comment "#{routing_daemon_shout} CONF"
55
- cfg += cmd "cat /etc/#{routing_daemon}/#{routing_conf_file}"
61
+ cfg += add_comment "#{routing_daemon_shout} OSPF6"
62
+ cfg += cmd "cat /etc/#{routing_daemon}/ospf6d.conf"
56
63
 
57
- cfg += add_comment 'MOTD'
58
- cfg += cmd 'cat /etc/motd'
64
+ cfg += add_comment "#{routing_daemon_shout} CONF"
65
+ cfg += cmd "cat /etc/#{routing_daemon}/#{routing_conf_file}"
59
66
 
60
- cfg += add_comment 'PASSWD'
61
- cfg += cmd 'cat /etc/passwd'
67
+ cfg += add_comment 'MOTD'
68
+ cfg += cmd 'cat /etc/motd'
62
69
 
63
- cfg += add_comment 'SWITCHD'
64
- cfg += cmd 'cat /etc/cumulus/switchd.conf'
70
+ cfg += add_comment 'PASSWD'
71
+ cfg += cmd 'cat /etc/passwd'
65
72
 
66
- cfg += add_comment 'PORTS'
67
- cfg += cmd 'cat /etc/cumulus/ports.conf'
73
+ cfg += add_comment 'SWITCHD'
74
+ cfg += cmd 'cat /etc/cumulus/switchd.conf'
68
75
 
69
- cfg += add_comment 'TRAFFIC'
70
- cfg += cmd 'cat /etc/cumulus/datapath/traffic.conf'
76
+ cfg += add_comment 'PORTS'
77
+ cfg += cmd 'cat /etc/cumulus/ports.conf'
71
78
 
72
- cfg += add_comment 'ACL'
73
- cfg += cmd 'cat /etc/cumulus/acl/policy.conf'
79
+ cfg += add_comment 'TRAFFIC'
80
+ cfg += cmd 'cat /etc/cumulus/datapath/traffic.conf'
74
81
 
75
- cfg += add_comment 'VERSION'
76
- cfg += cmd 'cat /etc/cumulus/etc.replace/os-release'
82
+ cfg += add_comment 'ACL'
83
+ cfg += cmd 'cat /etc/cumulus/acl/policy.conf'
77
84
 
78
- cfg += add_comment 'License'
79
- cfg += cmd 'cl-license'
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
@@ -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
@@ -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
- cfg.each_line.to_a[0..-2].join
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 :enable
20
- send "enable\n"
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 :ssh do
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
@@ -1,7 +1,7 @@
1
1
  class EOS < Oxidized::Model
2
2
  # Arista EOS model #
3
3
 
4
- prompt /^.+[#>]\s?$/
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|