oxidized 0.20.0 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +4 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  4. data/.github/no-response.yml +13 -0
  5. data/.github/workflows/publishdocker.yml +13 -0
  6. data/.gitignore +4 -0
  7. data/.rubocop.yml +73 -0
  8. data/.rubocop_todo.yml +120 -0
  9. data/.travis.yml +6 -1
  10. data/CHANGELOG.md +693 -243
  11. data/Dockerfile +27 -19
  12. data/LICENSE +201 -0
  13. data/README.md +234 -913
  14. data/Rakefile +48 -7
  15. data/TODO.md +29 -23
  16. data/bin/console +1 -1
  17. data/bin/oxidized +6 -5
  18. data/docs/Configuration.md +313 -0
  19. data/docs/Creating-Models.md +140 -0
  20. data/docs/Hooks.md +274 -0
  21. data/docs/Model-Notes/AireOS.md +11 -0
  22. data/docs/Model-Notes/ArbOS.md +11 -0
  23. data/docs/Model-Notes/Comware.md +13 -0
  24. data/docs/Model-Notes/Cumulus.md +40 -0
  25. data/docs/Model-Notes/EOS.md +12 -0
  26. data/docs/Model-Notes/IOS.md +29 -0
  27. data/docs/Model-Notes/JunOS.md +33 -0
  28. data/docs/Model-Notes/LinuxGeneric.md +24 -0
  29. data/docs/Model-Notes/Netgear.md +87 -0
  30. data/docs/Model-Notes/Nokia.md +9 -0
  31. data/docs/Model-Notes/README.md +24 -0
  32. data/docs/Model-Notes/SmartAX-Huawei.md +35 -0
  33. data/docs/Model-Notes/VRP-Huawei.md +34 -0
  34. data/docs/Model-Notes/Viptela.md +12 -0
  35. data/docs/Model-Notes/XGS4600-Zyxel.md +36 -0
  36. data/docs/Outputs.md +190 -0
  37. data/docs/Ruby-API.md +199 -0
  38. data/docs/Sources.md +171 -0
  39. data/docs/Supported-OS-Types.md +227 -0
  40. data/docs/Troubleshooting.md +66 -0
  41. data/extra/nagios_check_failing_nodes.rb +9 -2
  42. data/extra/oxidized-report-git-commits +21 -40
  43. data/extra/oxidized-ubuntu.haproxy +45 -0
  44. data/extra/oxidized.logrotate +7 -0
  45. data/extra/oxidized.service +13 -0
  46. data/extra/rest_client.rb +7 -10
  47. data/extra/syslog.rb +47 -42
  48. data/lib/oxidized/cli.rb +41 -31
  49. data/lib/oxidized/config/vars.rb +9 -14
  50. data/lib/oxidized/config.rb +20 -13
  51. data/lib/oxidized/core.rb +8 -10
  52. data/lib/oxidized/hook/awssns.rb +6 -7
  53. data/lib/oxidized/hook/ciscosparkdiff.rb +43 -0
  54. data/lib/oxidized/hook/exec.rb +19 -24
  55. data/lib/oxidized/hook/githubrepo.rb +17 -17
  56. data/lib/oxidized/hook/noophook.rb +1 -1
  57. data/lib/oxidized/hook/slackdiff.rb +32 -19
  58. data/lib/oxidized/hook/xmppdiff.rb +59 -0
  59. data/lib/oxidized/hook.rb +63 -64
  60. data/lib/oxidized/input/cli.rb +22 -12
  61. data/lib/oxidized/input/exec.rb +28 -0
  62. data/lib/oxidized/input/ftp.rb +16 -15
  63. data/lib/oxidized/input/http.rb +72 -0
  64. data/lib/oxidized/input/input.rb +6 -6
  65. data/lib/oxidized/input/ssh.rb +64 -56
  66. data/lib/oxidized/input/telnet.rb +59 -102
  67. data/lib/oxidized/input/tftp.rb +9 -10
  68. data/lib/oxidized/jobs.rb +9 -10
  69. data/lib/oxidized/manager.rb +42 -44
  70. data/lib/oxidized/model/acos.rb +19 -20
  71. data/lib/oxidized/model/acsw.rb +62 -0
  72. data/lib/oxidized/model/adtran.rb +26 -0
  73. data/lib/oxidized/model/aen.rb +19 -0
  74. data/lib/oxidized/model/aireos.rb +9 -10
  75. data/lib/oxidized/model/airfiber.rb +22 -0
  76. data/lib/oxidized/model/alteonos.rb +58 -0
  77. data/lib/oxidized/model/alvarion.rb +0 -4
  78. data/lib/oxidized/model/aos.rb +11 -5
  79. data/lib/oxidized/model/aos7.rb +6 -7
  80. data/lib/oxidized/model/aosw.rb +30 -27
  81. data/lib/oxidized/model/apc_aos.rb +2 -5
  82. data/lib/oxidized/model/arbos.rb +26 -0
  83. data/lib/oxidized/model/aricentiss.rb +49 -0
  84. data/lib/oxidized/model/asa.rb +61 -22
  85. data/lib/oxidized/model/asyncos.rb +46 -0
  86. data/lib/oxidized/model/audiocodes.rb +28 -0
  87. data/lib/oxidized/model/audiocodesmp.rb +28 -0
  88. data/lib/oxidized/model/awplus.rb +84 -0
  89. data/lib/oxidized/model/axos.rb +16 -0
  90. data/lib/oxidized/model/boss.rb +77 -0
  91. data/lib/oxidized/model/br6910.rb +42 -45
  92. data/lib/oxidized/model/c4cmts.rb +6 -10
  93. data/lib/oxidized/model/cambium.rb +23 -0
  94. data/lib/oxidized/model/casa.rb +1 -1
  95. data/lib/oxidized/model/catos.rb +1 -3
  96. data/lib/oxidized/model/cisconga.rb +1 -3
  97. data/lib/oxidized/model/ciscosma.rb +42 -0
  98. data/lib/oxidized/model/ciscosmb.rb +30 -10
  99. data/lib/oxidized/model/ciscovpn3k.rb +11 -0
  100. data/lib/oxidized/model/cnos.rb +33 -0
  101. data/lib/oxidized/model/comnetms.rb +43 -0
  102. data/lib/oxidized/model/comtrol.rb +41 -0
  103. data/lib/oxidized/model/comware.rb +28 -16
  104. data/lib/oxidized/model/coriant8600.rb +3 -5
  105. data/lib/oxidized/model/coriantgroove.rb +26 -0
  106. data/lib/oxidized/model/corianttmos.rb +1 -3
  107. data/lib/oxidized/model/cumulus.rb +60 -49
  108. data/lib/oxidized/model/datacom.rb +1 -4
  109. data/lib/oxidized/model/dcnos.rb +46 -0
  110. data/lib/oxidized/model/dellx.rb +76 -0
  111. data/lib/oxidized/model/dlink.rb +5 -4
  112. data/lib/oxidized/model/dnos.rb +11 -5
  113. data/lib/oxidized/model/eciapollo.rb +34 -0
  114. data/lib/oxidized/model/edgecos.rb +49 -0
  115. data/lib/oxidized/model/edgeos.rb +12 -5
  116. data/lib/oxidized/model/edgeswitch.rb +2 -4
  117. data/lib/oxidized/model/enterasys.rb +28 -0
  118. data/lib/oxidized/model/eos.rb +8 -8
  119. data/lib/oxidized/model/fabricos.rb +4 -6
  120. data/lib/oxidized/model/fastiron.rb +66 -0
  121. data/lib/oxidized/model/fiberdriver.rb +2 -2
  122. data/lib/oxidized/model/firebrick.rb +31 -0
  123. data/lib/oxidized/model/firelinuxos.rb +41 -0
  124. data/lib/oxidized/model/firewareos.rb +3 -6
  125. data/lib/oxidized/model/fortios.rb +31 -19
  126. data/lib/oxidized/model/ftos.rb +8 -5
  127. data/lib/oxidized/model/fujitsupy.rb +5 -7
  128. data/lib/oxidized/model/gaiaos.rb +7 -11
  129. data/lib/oxidized/model/gcombnps.rb +84 -0
  130. data/lib/oxidized/model/grandstream.rb +9 -0
  131. data/lib/oxidized/model/hatteras.rb +9 -6
  132. data/lib/oxidized/model/hirschmann.rb +39 -0
  133. data/lib/oxidized/model/hpebladesystem.rb +20 -18
  134. data/lib/oxidized/model/hpemsa.rb +10 -0
  135. data/lib/oxidized/model/hpmsm.rb +84 -0
  136. data/lib/oxidized/model/ibos.rb +55 -0
  137. data/lib/oxidized/model/icotera.rb +27 -0
  138. data/lib/oxidized/model/ios.rb +63 -70
  139. data/lib/oxidized/model/iosxe.rb +5 -0
  140. data/lib/oxidized/model/iosxr.rb +2 -3
  141. data/lib/oxidized/model/ipos.rb +10 -6
  142. data/lib/oxidized/model/ironware.rb +20 -19
  143. data/lib/oxidized/model/isam.rb +5 -6
  144. data/lib/oxidized/model/junos.rb +9 -11
  145. data/lib/oxidized/model/linuxgeneric.rb +74 -0
  146. data/lib/oxidized/model/masteros.rb +3 -6
  147. data/lib/oxidized/model/mlnxos.rb +9 -10
  148. data/lib/oxidized/model/model.rb +72 -46
  149. data/lib/oxidized/model/mtrlrfs.rb +1 -4
  150. data/lib/oxidized/model/ndms.rb +23 -0
  151. data/lib/oxidized/model/netgear.rb +35 -15
  152. data/lib/oxidized/model/netonix.rb +2 -2
  153. data/lib/oxidized/model/netscaler.rb +6 -3
  154. data/lib/oxidized/model/nos.rb +5 -7
  155. data/lib/oxidized/model/nsxconfig.rb +22 -0
  156. data/lib/oxidized/model/nsxfirewall.rb +22 -0
  157. data/lib/oxidized/model/nxos.rb +13 -3
  158. data/lib/oxidized/model/oneos.rb +15 -9
  159. data/lib/oxidized/model/openbsd.rb +63 -0
  160. data/lib/oxidized/model/opengear.rb +3 -5
  161. data/lib/oxidized/model/openwrt.rb +78 -0
  162. data/lib/oxidized/model/opnsense.rb +19 -0
  163. data/lib/oxidized/model/os10.rb +46 -0
  164. data/lib/oxidized/model/outputs.rb +5 -7
  165. data/lib/oxidized/model/panos.rb +11 -12
  166. data/lib/oxidized/model/pfsense.rb +11 -6
  167. data/lib/oxidized/model/planet.rb +14 -17
  168. data/lib/oxidized/model/powerconnect.rb +24 -19
  169. data/lib/oxidized/model/procurve.rb +43 -11
  170. data/lib/oxidized/model/purityos.rb +12 -0
  171. data/lib/oxidized/model/qtech.rb +41 -0
  172. data/lib/oxidized/model/quantaos.rb +4 -6
  173. data/lib/oxidized/model/raisecom.rb +19 -0
  174. data/lib/oxidized/model/routeros.rb +26 -8
  175. data/lib/oxidized/model/saos.rb +1 -2
  176. data/lib/oxidized/model/screenos.rb +8 -11
  177. data/lib/oxidized/model/sgos.rb +45 -0
  178. data/lib/oxidized/model/siklu.rb +1 -3
  179. data/lib/oxidized/model/slxos.rb +59 -0
  180. data/lib/oxidized/model/smartax.rb +25 -0
  181. data/lib/oxidized/model/sonicos.rb +51 -0
  182. data/lib/oxidized/model/speedtouch.rb +34 -0
  183. data/lib/oxidized/model/sros.rb +96 -0
  184. data/lib/oxidized/model/stoneos.rb +32 -0
  185. data/lib/oxidized/model/supermicro.rb +6 -41
  186. data/lib/oxidized/model/tdre.rb +30 -0
  187. data/lib/oxidized/model/telco.rb +24 -0
  188. data/lib/oxidized/model/timos.rb +6 -114
  189. data/lib/oxidized/model/tmos.rb +6 -3
  190. data/lib/oxidized/model/tplink.rb +11 -11
  191. data/lib/oxidized/model/trango.rb +21 -42
  192. data/lib/oxidized/model/ucs.rb +30 -0
  193. data/lib/oxidized/model/viptela.rb +29 -0
  194. data/lib/oxidized/model/voltaire.rb +9 -12
  195. data/lib/oxidized/model/voss.rb +17 -6
  196. data/lib/oxidized/model/vrp.rb +11 -6
  197. data/lib/oxidized/model/vyatta.rb +8 -6
  198. data/lib/oxidized/model/weos.rb +20 -0
  199. data/lib/oxidized/model/xos.rb +20 -8
  200. data/lib/oxidized/model/zhoneolt.rb +2 -2
  201. data/lib/oxidized/model/zynos.rb +1 -3
  202. data/lib/oxidized/model/zynoscli.rb +36 -0
  203. data/lib/oxidized/model/zynosgs.rb +38 -0
  204. data/lib/oxidized/node/stats.rb +33 -8
  205. data/lib/oxidized/node.rb +86 -95
  206. data/lib/oxidized/nodes.rb +48 -44
  207. data/lib/oxidized/output/file.rb +32 -37
  208. data/lib/oxidized/output/git.rb +138 -153
  209. data/lib/oxidized/output/gitcrypt.rb +228 -242
  210. data/lib/oxidized/output/http.rb +35 -34
  211. data/lib/oxidized/output/output.rb +2 -3
  212. data/lib/oxidized/source/csv.rb +50 -44
  213. data/lib/oxidized/source/http.rb +58 -58
  214. data/lib/oxidized/source/source.rb +9 -10
  215. data/lib/oxidized/source/sql.rb +47 -45
  216. data/lib/oxidized/string.rb +18 -14
  217. data/lib/oxidized/version.rb +17 -1
  218. data/lib/oxidized/worker.rb +72 -33
  219. data/oxidized.gemspec +20 -19
  220. metadata +180 -36
  221. data/.ruby-version +0 -1
  222. data/Gemfile.lock +0 -44
@@ -1,7 +1,7 @@
1
1
  class Dlink < Oxidized::Model
2
2
  # D-LINK Switches
3
3
 
4
- prompt /^(\r*[\w.@():-]+[#>]\s?)$/
4
+ prompt /^(\r*[\w\s.@()\/:-]+[#>]\s?)$/
5
5
  comment '# '
6
6
 
7
7
  cmd :secret do |cfg|
@@ -11,10 +11,11 @@ class Dlink < Oxidized::Model
11
11
  end
12
12
 
13
13
  cmd :all do |cfg|
14
- cfg.each_line.to_a[2..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n"
14
+ cfg.each_line.to_a[2..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n"
15
15
  end
16
16
 
17
17
  cmd 'show switch' do |cfg|
18
+ cfg.gsub! /^System Uptime\s.+/, '' # Omit constantly changing uptime info
18
19
  comment cfg
19
20
  end
20
21
 
@@ -25,8 +26,8 @@ class Dlink < Oxidized::Model
25
26
  cmd 'show config current'
26
27
 
27
28
  cfg :telnet do
28
- username /\r*username:/
29
- password /\r*password:/
29
+ username /\r*[Uu]ser[Nn]ame:/
30
+ password /\r*[Pp]ass[Ww]ord:/
30
31
  end
31
32
 
32
33
  cfg :telnet, :ssh do
@@ -1,16 +1,19 @@
1
- class DNOS < Oxidized::Model
2
-
1
+ class DNOS < Oxidized::Model
3
2
  # Force10 DNOS model #
4
3
 
5
4
  comment '! '
6
5
 
7
6
  cmd :all do |cfg|
7
+ cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, ''
8
+ cfg.gsub! /(uptime is)(\s.+)/, '\\1 <removed>' # Omit changing uptime info
8
9
  cfg.each_line.to_a[2..-2].join
9
10
  end
10
11
 
11
- cmd :secret do |cfg|
12
+ cmd :secret do |cfg|
12
13
  cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
13
14
  cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>'
15
+ cfg.gsub! /password (\d+) (\S+).*/, '<secret hidden>'
16
+ cfg.gsub! /^(tacacs-server key \d+) (\S+).*/, '\\1 <secret hidden>'
14
17
  cfg
15
18
  end
16
19
 
@@ -22,6 +25,10 @@ class DNOS < Oxidized::Model
22
25
  comment cfg
23
26
  end
24
27
 
28
+ cmd 'show version' do |cfg|
29
+ comment cfg
30
+ end
31
+
25
32
  cmd 'show running-config' do |cfg|
26
33
  cfg = cfg.each_line.to_a[3..-1].join
27
34
  cfg
@@ -42,7 +49,6 @@ class DNOS < Oxidized::Model
42
49
  post_login 'terminal length 0'
43
50
  post_login 'terminal width 0'
44
51
  pre_logout 'exit'
45
- pre_logout 'exit'
52
+ pre_logout 'exit'
46
53
  end
47
-
48
54
  end
@@ -0,0 +1,34 @@
1
+ # ECI Telecom Apollo
2
+ # Tested on OPT9608 systems via SSH and telnet
3
+
4
+ class ECIapollo < Oxidized::Model
5
+ prompt /^([\w.@()-]+[#>]\s?)$/
6
+ comment '# '
7
+
8
+ cmd :all do |cfg|
9
+ cfg.each_line.to_a[1..-2].join
10
+ end
11
+
12
+ cmd :secret do |cfg|
13
+ cfg.gsub!(/community (\S+) {/, 'community <hidden> {')
14
+ cfg.gsub!(/ "\$\d\$\S+; ## SECRET-DATA/, ' <secret removed>;')
15
+ cfg
16
+ end
17
+
18
+ cfg :telnet do
19
+ username(/^login:/)
20
+ password(/^Password:/)
21
+ end
22
+
23
+ cfg :telnet, :ssh do
24
+ post_login 'set cli screen-length 0'
25
+ post_login 'set cli screen-width 0'
26
+ pre_logout 'exit'
27
+ end
28
+
29
+ cmd('show version') { |cfg| comment cfg }
30
+ cmd('show system licenses') { |cfg| comment cfg }
31
+ cmd('show configuration') { |cfg| comment cfg }
32
+ cmd('show configuration | display-set') { |cfg| cfg }
33
+ cmd('show chassis inventory') { |cfg| comment cfg }
34
+ end
@@ -0,0 +1,49 @@
1
+ class EdgeCOS < 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 system' do |cfg|
17
+ cfg.gsub! /^.*\sUp Time\s*:.*\n/i, ''
18
+ cfg.gsub! /^(.*\sTemperature \d*:).*\n/i, '\\1 <removed>'
19
+ comment cfg
20
+ end
21
+
22
+ cmd 'show version' do |cfg|
23
+ comment cfg
24
+ end
25
+
26
+ cmd 'show watchdog' do |cfg|
27
+ comment cfg
28
+ end
29
+
30
+ cmd 'show interfaces transceiver' do |cfg|
31
+ cfg.gsub! /(\d\d)!/, '\\1 ' # alarm indicators of DDM thresholds
32
+ cfg.gsub! /^(\s*Temperature\s*:).*/, '\1 <hidden>'
33
+ cfg.gsub! /^(\s*Vcc\s*:).*/, '\1 <hidden>'
34
+ cfg.gsub! /^(\s*Bias Current\s*:).*/, '\1 <hidden>'
35
+ cfg.gsub! /^(\s*TX Power\s*:).*/, '\1 <hidden>'
36
+ cfg.gsub! /^(\s*RX Power\s*:).*/, '\1 <hidden>'
37
+ comment cfg
38
+ end
39
+
40
+ cfg :telnet do
41
+ username /^Username:/
42
+ password /^Password:/
43
+ end
44
+
45
+ cfg :telnet, :ssh do
46
+ post_login 'terminal length 0'
47
+ pre_logout 'exit'
48
+ end
49
+ end
@@ -1,19 +1,27 @@
1
1
  class Edgeos < Oxidized::Model
2
-
3
2
  # EdgeOS #
4
3
 
5
- prompt /\@.*?\:~\$\s/
4
+ prompt /@.*?:~\$\s/
6
5
 
7
6
  cmd :all do |cfg|
8
- cfg = cfg.lines.to_a[1..-2].join
7
+ cfg.lines.to_a[1..-2].join
9
8
  end
10
9
 
11
10
  cmd :secret do |cfg|
11
+ cfg.gsub! /encrypted-password (\S+).*/, 'encrypted-password <secret removed>'
12
+ cfg.gsub! /plaintext-password (\S+).*/, 'plaintext-password <secret removed>'
13
+ cfg.gsub! /password (\S+).*/, 'password <secret removed>'
14
+ cfg.gsub! /pre-shared-secret (\S+).*/, 'pre-shared-secret <secret removed>'
12
15
  cfg.gsub! /community (\S+) {/, 'community <hidden> {'
13
16
  cfg
14
17
  end
15
18
 
16
- cmd 'show configuration | no-more'
19
+ cmd 'show version | no-more' do |cfg|
20
+ cfg.gsub! /^Uptime:\s.+/, ''
21
+ comment cfg
22
+ end
23
+
24
+ cmd 'show configuration commands | no-more'
17
25
 
18
26
  cfg :telnet do
19
27
  username /login:\s/
@@ -23,5 +31,4 @@ class Edgeos < Oxidized::Model
23
31
  cfg :telnet, :ssh do
24
32
  pre_logout 'exit'
25
33
  end
26
-
27
34
  end
@@ -1,13 +1,12 @@
1
1
  class EdgeSwitch < Oxidized::Model
2
-
3
- # Ubiquiti EdgeSwitch #
2
+ # Ubiquiti EdgeSwitch #
4
3
 
5
4
  comment '!'
6
5
 
7
6
  prompt /\(.*\)\s[#>]/
8
7
 
9
8
  cmd 'show running-config' do |cfg|
10
- cfg.each_line.to_a[2..-2].reject { |line| line.match /System Up Time.*/ or line.match /Current SNTP Synchronized Time.*/ }.join
9
+ cfg.each_line.to_a[2..-2].reject { |line| line.match(/System Up Time.*/) || line.match(/Current SNTP Synchronized Time.*/) }.join
11
10
  end
12
11
 
13
12
  cfg :telnet do
@@ -28,5 +27,4 @@ class EdgeSwitch < Oxidized::Model
28
27
  pre_logout 'quit'
29
28
  pre_logout 'n'
30
29
  end
31
-
32
30
  end
@@ -0,0 +1,28 @@
1
+ class Enterasys < Oxidized::Model
2
+ # Enterasys B3/C3 models #
3
+
4
+ prompt /^.+\w\(su\)->\s?$/
5
+
6
+ comment '!'
7
+
8
+ cmd :all do |cfg|
9
+ cfg.each_line.to_a[2..-3].map { |line| line.delete("\r").rstrip }.join("\n") + "\n"
10
+ end
11
+
12
+ cmd 'show system hardware' do |cfg|
13
+ comment cfg
14
+ end
15
+
16
+ cmd 'show config' do |cfg|
17
+ cfg.gsub! /^This command shows non-default configurations only./, ''
18
+ cfg.gsub! /^Use 'show config all' to show both default and non-default configurations./, ''
19
+ cfg.gsub! /^!|#.*/, ''
20
+ cfg.gsub! /^$\n/, ''
21
+
22
+ cfg
23
+ end
24
+
25
+ cfg :ssh do
26
+ pre_logout 'exit'
27
+ end
28
+ end
@@ -1,5 +1,4 @@
1
1
  class EOS < Oxidized::Model
2
-
3
2
  # Arista EOS model #
4
3
 
5
4
  prompt /^.+[#>]\s?$/
@@ -7,15 +6,17 @@ class EOS < Oxidized::Model
7
6
  comment '! '
8
7
 
9
8
  cmd :all do |cfg|
10
- cfg.each_line.to_a[1..-2].join
9
+ cfg.cut_both
11
10
  end
12
11
 
13
12
  cmd :secret do |cfg|
14
- cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
15
- cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>'
16
- cfg.gsub! /^(enable secret).*/, '\\1 <configuration removed>'
17
- cfg.gsub! /^(tacacs-server key \d+).*/, '\\1 <configuration removed>'
18
- cfg
13
+ cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
14
+ cfg.gsub! /(secret \w+) (\S+).*/, '\\1 <secret hidden>'
15
+ cfg.gsub! /(password \d+) (\S+).*/, '\\1 <secret hidden>'
16
+ cfg.gsub! /^(enable secret).*/, '\\1 <configuration removed>'
17
+ cfg.gsub! /^(tacacs-server key \d+).*/, '\\1 <configuration removed>'
18
+ cfg.gsub! /( {6}key) (\h+ 7) (\h+).*/, '\\1 <secret hidden>'
19
+ cfg
19
20
  end
20
21
 
21
22
  cmd 'show inventory | no-more' do |cfg|
@@ -41,5 +42,4 @@ class EOS < Oxidized::Model
41
42
  end
42
43
  pre_logout 'exit'
43
44
  end
44
-
45
45
  end
@@ -1,22 +1,20 @@
1
1
  class FabricOS < Oxidized::Model
2
-
3
2
  # Brocade Fabric OS model #
4
3
  ## FIXME: Only ssh exec mode support, no telnet, no ssh screenscraping
5
4
 
6
5
  prompt /^([\w]+:+[\w]+[>]\s)$/
7
- comment '# '
6
+ comment '# '
8
7
 
9
8
  cmd 'chassisShow' do |cfg|
10
- comment cfg.each_line.reject { |line| line.match /Time Awake:/ or line.match /Power Usage \(Watts\):/ or line.match /Time Alive:/ or line.match /Update:/ }.join
9
+ comment cfg.each_line.reject { |line| line.match(/Time Awake:/) || line.match(/Power Usage \(Watts\):/) || line.match(/Time Alive:/) || line.match(/Update:/) }.join
11
10
  end
12
11
 
13
12
  cmd 'configShow -all' do |cfg|
14
- cfg = cfg.each_line.reject { |line| line.match /date = /}.join
13
+ cfg = cfg.each_line.reject { |line| line.match /date = / }.join
15
14
  cfg
16
15
  end
17
16
 
18
17
  cfg :ssh do
19
- exec true # don't run shell, run each command in exec channel
18
+ exec true # don't run shell, run each command in exec channel
20
19
  end
21
-
22
20
  end
@@ -0,0 +1,66 @@
1
+ class FastIron < Oxidized::Model
2
+ prompt /^([\w.@()-]+[#>]\s?)$/
3
+ comment '! '
4
+
5
+ cmd :all do |cfg|
6
+ # cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager
7
+ # cfg.gsub! /\cH+/, '' # example how to handle pager
8
+ # get rid of errors for commands that don't work on some devices
9
+ cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, ''
10
+ cfg.cut_both
11
+ end
12
+
13
+ cmd 'show version' do |cfg|
14
+ comments = []
15
+ comments << cfg.lines.first
16
+ lines = cfg.lines
17
+ lines.each_with_index do |line, _i|
18
+ comments << "Version: #{Regexp.last_match(1)}" if line =~ /^\s+SW: Version (.*)$/
19
+
20
+ comments << "Boot-Monitor Version: #{Regexp.last_match(1)}" if line =~ /^\s+Compressed Boot-Monitor Image size = \d+, Version:(.*)$/
21
+
22
+ comments << "Serial: #{Regexp.last_match(1)}" if line =~ /^\s+Serial #:(.*)$/
23
+ end
24
+ comments << "\n"
25
+ comment comments.join "\n"
26
+ end
27
+
28
+ cmd 'show module' do |cfg|
29
+ cfg.gsub! /^$\n/, ''
30
+ cfg.gsub! /^/, 'Modules: ' unless cfg.empty?
31
+ comment "#{cfg}\n"
32
+ end
33
+
34
+ cmd 'show media | exclude EMPTY' do |cfg|
35
+ comment cfg
36
+ end
37
+
38
+ cmd 'show hardware-info' do |cfg|
39
+ comment cfg
40
+ end
41
+
42
+ cmd 'show stack' do |cfg|
43
+ comment cfg
44
+ end
45
+
46
+ cmd 'show running-config'
47
+
48
+ cfg :telnet do
49
+ username /^.* login: /
50
+ password /^Password:/
51
+ end
52
+
53
+ cfg :telnet, :ssh do
54
+ # preferred way to handle additional passwords
55
+ post_login do
56
+ if vars(:enable) == true
57
+ cmd "enable"
58
+ elsif vars(:enable)
59
+ cmd "enable", /^[pP]assword:/
60
+ cmd vars(:enable)
61
+ end
62
+ end
63
+ post_login 'skip-page-display'
64
+ pre_logout 'exit'
65
+ end
66
+ end
@@ -3,7 +3,7 @@ class FiberDriver < Oxidized::Model
3
3
  comment "! "
4
4
 
5
5
  cmd :all do |cfg|
6
- cfg.each_line.to_a[1..-2].join
6
+ cfg.cut_both
7
7
  end
8
8
  cmd 'show inventory' do |cfg|
9
9
  comment cfg
@@ -13,7 +13,7 @@ class FiberDriver < Oxidized::Model
13
13
  cfg.each_line.to_a[3..-1].join
14
14
  cfg.gsub! /^Building configuration.*$/, ''
15
15
  cfg.gsub! /^Current configuration:.*$$/, ''
16
- cfg.gsub! /^! Configuration saved on .*$/, ''
16
+ cfg.gsub! /^! Configuration (saved|generated) on .*$/, ''
17
17
  cfg
18
18
  end
19
19
 
@@ -0,0 +1,31 @@
1
+ class Firebrick < Oxidized::Model
2
+ # Firebrick #
3
+ prompt /\x0a\x1b\x5b\x32\x4b\x0d.*>\s/
4
+
5
+ cmd :all do |cfg|
6
+ # remove arbitrary whitespace after commands.
7
+ cfg.each_line.to_a[1..-2].drop_while { |e| e.match /^\s+$/ }.join
8
+ end
9
+
10
+ cmd 'show status' do |cfg|
11
+ cfg.gsub! /Status/, ''
12
+ cfg.gsub! /------/, ''
13
+ cfg.gsub! /Uptime.*/, ''
14
+ cfg.gsub! /Current time.*/, ''
15
+ cfg.gsub! /RAM.*/, ''
16
+ cfg.gsub! /Warranty.*/, ''
17
+
18
+ comment cfg
19
+ end
20
+
21
+ cmd 'show configuration'
22
+
23
+ cfg :telnet do
24
+ username /Username:\s?/
25
+ password /Password:\s?/
26
+ end
27
+
28
+ cfg :telnet, :ssh do
29
+ pre_logout 'exit'
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ class FireLinuxOS < Oxidized::Model
2
+ # Fire Linux OS is what the new FTD (FirePOWER) series devices from Cisco run. At the backend, it's mostly identical to ASA's.
3
+
4
+ prompt /^[#>]\(?.+\)?\s?/
5
+ comment '! '
6
+
7
+ cmd :all do |cfg|
8
+ cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, ''
9
+ cfg.each_line.to_a[1..-2].join
10
+ end
11
+
12
+ cmd :secret do |cfg|
13
+ cfg.gsub! /enable password (\S+) (.*)/, 'enable password <secret hidden> \2'
14
+ cfg.gsub! /username (\S+) password (\S+) (.*)/, 'username \1 password <secret hidden> \3'
15
+ cfg.gsub! /(ikev[12] ((remote|local)-authentication )?pre-shared-key) (\S+)/, '\1 <secret hidden>'
16
+ cfg.gsub! /^(aaa-server TACACS\+? \(\S+\) host.*\n\skey) \S+$/mi, '\1 <secret hidden>'
17
+ cfg.gsub! /ldap-login-password (\S+)/, 'ldap-login-password <secret hidden>'
18
+ cfg.gsub! /^snmp-server host (.*) community (\S+)/, 'snmp-server host \1 community <secret hidden>'
19
+ cfg
20
+ end
21
+
22
+ cmd 'show version system' do |cfg|
23
+ cfg = cfg.each_line.reject { |line| line.match /(\s+up\s+\d+\s+)|(.*days.*)/ }
24
+ cfg = cfg.join
25
+ comment cfg
26
+ end
27
+
28
+ cmd 'show inventory' do |cfg|
29
+ comment cfg
30
+ end
31
+
32
+ cmd 'show running-config all' do |cfg|
33
+ cfg = cfg.each_line.to_a[3..-1].join
34
+ cfg.gsub! /^: [^\n]*\n/, ''
35
+ cfg
36
+ end
37
+
38
+ cfg :ssh do
39
+ pre_logout 'exit'
40
+ end
41
+ end
@@ -1,10 +1,9 @@
1
1
  class FirewareOS < Oxidized::Model
2
-
3
- prompt /^([\w.@-]+[#>]\s?)$/
2
+ prompt /^\[?\w*\]?\w*?(<\w*>)?(#|>)\s*$/
4
3
  comment '-- '
5
4
 
6
5
  cmd :all do |cfg|
7
- cfg.each_line.to_a[1..-2].join
6
+ cfg.cut_both
8
7
  end
9
8
 
10
9
  # Handle Logon Disclaimer added in XTM 11.9.3
@@ -15,7 +14,7 @@ class FirewareOS < Oxidized::Model
15
14
 
16
15
  cmd 'show sysinfo' do |cfg|
17
16
  # avoid commits due to uptime
18
- cfg = cfg.each_line.select { |line| not line.match /(.*time.*)|(.*memory.*)|(.*cpu.*)/ }
17
+ cfg = cfg.each_line.reject { |line| line.match /(.*time.*)|(.*memory.*)|(.*cpu.*)/ }
19
18
  cfg = cfg.join
20
19
  comment cfg
21
20
  end
@@ -25,6 +24,4 @@ class FirewareOS < Oxidized::Model
25
24
  cfg :ssh do
26
25
  pre_logout 'exit'
27
26
  end
28
-
29
27
  end
30
-
@@ -1,8 +1,7 @@
1
1
  class FortiOS < Oxidized::Model
2
+ comment '# '
2
3
 
3
- comment '# '
4
-
5
- prompt /^([-\w\.\~]+(\s[\(\w\-\.\)]+)?\~?\s?[#>$]\s?)$/
4
+ prompt /^([-\w.~]+(\s[(\w\-.)]+)?~?\s?[#>$]\s?)$/
6
5
 
7
6
  expect /^--More--\s$/ do |data, re|
8
7
  send ' '
@@ -15,14 +14,28 @@ class FortiOS < Oxidized::Model
15
14
  end
16
15
 
17
16
  cmd :secret do |cfg|
18
- cfg.gsub! /(set (?:passwd|password|psksecret|secret|key ENC)).*/, '\\1 <configuration removed>'
19
- cfg.gsub! /(set private-key).*-+END ENCRYPTED PRIVATE KEY-*"$/m , '\\1 <configuration removed>'
17
+ # ENC indicates an encrypted password, and secret indicates a secret string
18
+ cfg.gsub! /(set .+ ENC) .+/, '\\1 <configuration removed>'
19
+ cfg.gsub! /(set .*secret) .+/, '\\1 <configuration removed>'
20
+ # A number of other statements also contains sensitive strings
21
+ cfg.gsub! /(set (?:passwd|password|key|group-password|auth-password-l1|auth-password-l2|rsso|history0|history1)) .+/, '\\1 <configuration removed>'
22
+ cfg.gsub! /(set md5-key [0-9]+) .+/, '\\1 <configuration removed>'
23
+ cfg.gsub! /(set private-key ).*?-+END (ENCRYPTED|RSA|OPENSSH) PRIVATE KEY-+\n?"$/m, '\\1<configuration removed>'
24
+ cfg.gsub! /(set ca ).*?-+END CERTIFICATE-+"$/m, '\\1<configuration removed>'
25
+ cfg.gsub! /(set csr ).*?-+END CERTIFICATE REQUEST-+"$/m, '\\1<configuration removed>'
20
26
  cfg
21
27
  end
22
28
 
23
29
  cmd 'get system status' do |cfg|
24
- @vdom_enabled = cfg.include? 'Virtual domain configuration: enable'
25
- cfg.gsub!(/(System time: )(.*)/, '\1<stripped>\3')
30
+ @vdom_enabled = cfg.match /Virtual domain configuration: (enable|multiple)/
31
+ cfg.gsub! /(System time:).*/, '\\1 <stripped>'
32
+ cfg.gsub! /(Cluster uptime:).*/, '\\1 <stripped>'
33
+ cfg.gsub! /(Virus-DB|Extended DB|IPS-DB|IPS-ETDB|APP-DB|INDUSTRIAL-DB|Botnet DB|IPS Malicious URL Database).*/, '\\1 <db version stripped>'
34
+ comment cfg
35
+ end
36
+
37
+ cmd 'get system ha status' do |cfg|
38
+ cfg = cfg.each_line.select { |line| line.match /^(HA Health Status|Mode|Model|Master|Slave\s+):/ }.join
26
39
  comment cfg
27
40
  end
28
41
 
@@ -30,21 +43,22 @@ class FortiOS < Oxidized::Model
30
43
  cfg = []
31
44
  cfg << cmd('config global') if @vdom_enabled
32
45
 
33
- cfg << cmd('get hardware status') do |cfg|
34
- comment cfg
46
+ cfg << cmd('get hardware status') do |cfg_hw|
47
+ comment cfg_hw
35
48
  end
36
49
 
37
- #default behaviour: include autoupdate output (backwards compatibility)
38
- #do not include if variable "show_autoupdate" is set to false
39
- if defined?(vars(:fortios_autoupdate)).nil? || vars(:fortios_autoupdate)
40
- cfg << cmd('diagnose autoupdate version') do |cfg|
41
- comment cfg.each_line.reject { |line| line.match /Last Update|Result/ }.join
42
- end
50
+ # default behaviour: include autoupdate output (backwards compatibility)
51
+ # do not include if variable "show_autoupdate" is set to false
52
+ if defined?(vars(:fortios_autoupdate)).nil? || vars(:fortios_autoupdate)
53
+ cfg << cmd('diagnose autoupdate version') do |cfg_auto|
54
+ cfg_auto.gsub! /(FDS Address\n---------\n).*/, '\\1IP Address removed'
55
+ comment cfg_auto.each_line.reject { |line| line.match /Last Update|Result/ }.join
56
+ end
43
57
  end
44
58
 
45
- cfg << cmd('end') if @vdom_enabled
59
+ cfg << cmd('end') if @vdom_enabled
46
60
 
47
- cfg << cmd('show')
61
+ cfg << cmd('show full-configuration | grep .')
48
62
  cfg.join "\n"
49
63
  end
50
64
 
@@ -56,6 +70,4 @@ cfg << cmd('end') if @vdom_enabled
56
70
  cfg :telnet, :ssh do
57
71
  pre_logout "exit\n"
58
72
  end
59
-
60
73
  end
61
-
@@ -1,5 +1,4 @@
1
- class FTOS < Oxidized::Model
2
-
1
+ class FTOS < Oxidized::Model
3
2
  # Force10 FTOS model #
4
3
 
5
4
  comment '! '
@@ -8,13 +7,18 @@ class FTOS < Oxidized::Model
8
7
  cfg.each_line.to_a[2..-2].join
9
8
  end
10
9
 
11
- cmd :secret do |cfg|
10
+ cmd :secret do |cfg|
12
11
  cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
13
- cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>'
12
+ cfg.gsub! /(secret \d* {0,1})\S+(.*)/, '\\1<secret hidden>\\2'
13
+ cfg.gsub! /(password \d+) \S+(.*)/, '\\1 <hash hidden>\\2'
14
+ cfg.gsub! /(^snmp-server.*version \S+) \S+(.*)/, '\\1 <community removed>\\2'
15
+ cfg.gsub! /(^radius-server.*key \d )\S+/, '\\1<hash hidden>\\2'
14
16
  cfg
15
17
  end
16
18
 
17
19
  cmd 'show inventory' do |cfg|
20
+ # Old versions of FTOS can occasionally return data that triggers encoding errors.
21
+ cfg.encode!("UTF-8", invalid: :replace, undef: :replace, replace: "")
18
22
  comment cfg
19
23
  end
20
24
 
@@ -43,5 +47,4 @@ class FTOS < Oxidized::Model
43
47
  end
44
48
  pre_logout 'exit'
45
49
  end
46
-
47
50
  end
@@ -1,23 +1,22 @@
1
1
  class FujitsuPY < Oxidized::Model
2
-
3
- prompt /^(\([\w.-]*\)\s#|^\S+\#\s)$/
2
+ prompt /^(\([\w.-]*\)\s#|^\S+#\s)$/
4
3
  comment '! '
5
4
 
6
5
  cmd :all do |cfg|
7
- cfg.each_line.to_a[1..-2].join
6
+ cfg.cut_both
8
7
  end
9
8
 
10
- # 1Gbe switch
9
+ # 1Gbe switch
11
10
  cmd 'show version' do |cfg|
12
11
  cfg.gsub! /^(<ERROR> : 2 : format error)$/, ''
13
12
  comment cfg
14
13
  end
15
14
 
16
- # 10Gbe switch
15
+ # 10Gbe switch
17
16
  cmd 'show system information' do |cfg|
18
17
  cfg.gsub! /^Current-time : [\w\s:]*$/, ''
19
18
  cfg.gsub! /^(\s{33}\^)$/, ''
20
- cfg.gsub! /^(\% Invalid input detected at '\^' marker.)$/, ''
19
+ cfg.gsub! /^(% Invalid input detected at '\^' marker.)$/, ''
21
20
  comment cfg
22
21
  end
23
22
 
@@ -38,5 +37,4 @@ class FujitsuPY < Oxidized::Model
38
37
  send "n\n"
39
38
  end
40
39
  end
41
-
42
40
  end