oxidized 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +135 -865
- data/docs/Configuration.md +186 -0
- data/docs/Hooks.md +143 -0
- data/docs/Outputs.md +190 -0
- data/docs/Ruby-API.md +115 -0
- data/docs/Sources.md +110 -0
- data/docs/Supported-OS-Types.md +149 -0
- data/docs/VRP-Huawei.md +27 -0
- data/extra/oxidized-report-git-commits +21 -40
- data/extra/oxidized-ubuntu.haproxy +45 -0
- data/extra/oxidized.service +4 -0
- data/lib/oxidized/hook.rb +1 -0
- data/lib/oxidized/hook/exec.rb +0 -1
- data/lib/oxidized/input/ssh.rb +11 -8
- data/lib/oxidized/model/acsw.rb +67 -0
- data/lib/oxidized/model/aen.rb +20 -0
- data/lib/oxidized/model/alteonos.rb +60 -0
- data/lib/oxidized/model/asa.rb +53 -18
- data/lib/oxidized/model/asyncos.rb +49 -0
- data/lib/oxidized/model/audiocodes.rb +32 -0
- data/lib/oxidized/model/boss.rb +76 -0
- data/lib/oxidized/model/ciscosma.rb +45 -0
- data/lib/oxidized/model/ciscosmb.rb +6 -1
- data/lib/oxidized/model/coriantgroove.rb +30 -0
- data/lib/oxidized/model/dlink.rb +1 -0
- data/lib/oxidized/model/enterasys.rb +30 -0
- data/lib/oxidized/model/fiberdriver.rb +1 -1
- data/lib/oxidized/model/fortios.rb +3 -1
- data/lib/oxidized/model/ftos.rb +2 -0
- data/lib/oxidized/model/hirschmann.rb +41 -0
- data/lib/oxidized/model/hpemsa.rb +13 -0
- data/lib/oxidized/model/ios.rb +2 -2
- data/lib/oxidized/model/iosxr.rb +1 -0
- data/lib/oxidized/model/ipos.rb +7 -1
- data/lib/oxidized/model/ironware.rb +4 -1
- data/lib/oxidized/model/netgear.rb +12 -4
- data/lib/oxidized/model/panos.rb +1 -1
- data/lib/oxidized/model/planet.rb +2 -1
- data/lib/oxidized/model/powerconnect.rb +5 -0
- data/lib/oxidized/model/procurve.rb +13 -0
- data/lib/oxidized/model/routeros.rb +12 -5
- data/lib/oxidized/model/sgos.rb +46 -0
- data/lib/oxidized/model/ucs.rb +31 -0
- data/lib/oxidized/model/voss.rb +12 -3
- data/lib/oxidized/model/vrp.rb +6 -0
- data/lib/oxidized/model/weos.rb +22 -0
- data/lib/oxidized/model/xos.rb +4 -0
- data/lib/oxidized/node.rb +4 -2
- data/lib/oxidized/nodes.rb +1 -0
- data/lib/oxidized/version.rb +1 -1
- data/lib/oxidized/worker.rb +23 -2
- data/oxidized.gemspec +1 -1
- metadata +54 -46
@@ -0,0 +1,45 @@
|
|
1
|
+
class CiscoSMA < Oxidized::Model
|
2
|
+
|
3
|
+
# SMA prompt "mail.example.com> "
|
4
|
+
prompt /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/
|
5
|
+
comment '! '
|
6
|
+
|
7
|
+
# Select passphrase display option
|
8
|
+
expect /using loadconfig command\. \[Y\]\>/ do |data, re|
|
9
|
+
send "y\n"
|
10
|
+
data.sub re, ''
|
11
|
+
end
|
12
|
+
|
13
|
+
# handle paging
|
14
|
+
expect /-Press Any Key For More-+.*$/ do |data, re|
|
15
|
+
send " "
|
16
|
+
data.sub re, ''
|
17
|
+
end
|
18
|
+
|
19
|
+
cmd 'version' do |cfg|
|
20
|
+
comment cfg
|
21
|
+
end
|
22
|
+
|
23
|
+
cmd 'showconfig' do |cfg|
|
24
|
+
#Delete hour and date which change each run
|
25
|
+
#cfg.gsub! /\sCurrent Time: \S+\s\S+\s+\S+\s\S+\s\S+/, ' Current Time:'
|
26
|
+
# Delete select passphrase display option
|
27
|
+
cfg.gsub! /Do you want to mask the password\? Files with masked passwords cannot be loaded/, ''
|
28
|
+
cfg.gsub! /^\s+y/, ''
|
29
|
+
# Delete space
|
30
|
+
cfg.gsub! /\n\s{25}/, ''
|
31
|
+
# Delete after line
|
32
|
+
cfg.gsub! /([\/\-,.\w><@]+)(\s{27})/,"\\1"
|
33
|
+
# Add a carriage return
|
34
|
+
cfg.gsub! /([\/\-,.\w><@]+)(\s{6,8})([\/\-,.\w><@]+)/,"\\1\n\\2\\3"
|
35
|
+
# Delete prompt
|
36
|
+
cfg.gsub! /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/, ''
|
37
|
+
cfg
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
cfg :ssh do
|
42
|
+
pre_logout "exit"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class CiscoSMB < Oxidized::Model
|
2
2
|
|
3
|
-
# Cisco Small Business
|
3
|
+
# Cisco Small Business 300, 500, and ESW2 series switches
|
4
4
|
# http://www.cisco.com/c/en/us/support/switches/small-business-300-series-managed-switches/products-release-notes-list.html
|
5
5
|
|
6
6
|
prompt /^\r?([\w.@()-]+[#>]\s?)$/
|
@@ -16,12 +16,17 @@ class CiscoSMB < Oxidized::Model
|
|
16
16
|
cmd :secret do |cfg|
|
17
17
|
cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
|
18
18
|
cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>'
|
19
|
+
cfg.gsub! /^(encrypted radius-server key).*/, '\\1 <configuration removed>'
|
19
20
|
cfg
|
20
21
|
end
|
21
22
|
|
22
23
|
cmd 'show version' do |cfg|
|
23
24
|
comment cfg
|
24
25
|
end
|
26
|
+
|
27
|
+
cmd 'show bootvar' do |cfg|
|
28
|
+
comment cfg
|
29
|
+
end
|
25
30
|
|
26
31
|
cmd 'show running-config' do |cfg|
|
27
32
|
cfg = cfg.each_line.to_a[0..-1].join
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class CoriantGroove < Oxidized::Model
|
2
|
+
|
3
|
+
comment '# '
|
4
|
+
|
5
|
+
prompt /^(\w+@.*>\s*)$/
|
6
|
+
|
7
|
+
cmd :all do |cfg|
|
8
|
+
cfg.each_line.to_a[1..-3].map{|line|line.delete("\r").rstrip}.join("\n") + "\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
cmd 'show inventory' do |cfg|
|
12
|
+
cfg = cfg.each_line.to_a[0..-2].join
|
13
|
+
comment cfg
|
14
|
+
end
|
15
|
+
|
16
|
+
cmd 'show softwareload' do |cfg|
|
17
|
+
cfg = cfg.each_line.to_a[0..-2].join
|
18
|
+
comment cfg
|
19
|
+
end
|
20
|
+
|
21
|
+
cmd 'show config | display commands' do |cfg|
|
22
|
+
cfg.each_line.to_a[1..-1].join
|
23
|
+
end
|
24
|
+
|
25
|
+
cfg :ssh do
|
26
|
+
post_login 'set -f cli-config cli-columns 65535'
|
27
|
+
pre_logout 'quit -f'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/lib/oxidized/model/dlink.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
class Enterasys < Oxidized::Model
|
2
|
+
|
3
|
+
# Enterasys B3/C3 models #
|
4
|
+
|
5
|
+
prompt /^.+\w\(su\)->\s?$/
|
6
|
+
|
7
|
+
comment '!'
|
8
|
+
|
9
|
+
cmd :all do |cfg|
|
10
|
+
cfg.each_line.to_a[2..-3].map{|line|line.delete("\r").rstrip}.join("\n") + "\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
cmd 'show system hardware' do |cfg|
|
14
|
+
comment cfg
|
15
|
+
end
|
16
|
+
|
17
|
+
cmd 'show config' do |cfg|
|
18
|
+
cfg.gsub! /^This command shows non-default configurations only./, ''
|
19
|
+
cfg.gsub! /^Use 'show config all' to show both default and non-default configurations./, ''
|
20
|
+
cfg.gsub! /^!|#.*/, ''
|
21
|
+
cfg.gsub! /^$\n/, ''
|
22
|
+
|
23
|
+
cfg
|
24
|
+
end
|
25
|
+
|
26
|
+
cfg :ssh do
|
27
|
+
pre_logout 'exit'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -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
|
|
@@ -15,8 +15,9 @@ class FortiOS < Oxidized::Model
|
|
15
15
|
end
|
16
16
|
|
17
17
|
cmd :secret do |cfg|
|
18
|
-
cfg.gsub! /(set (?:passwd|password|psksecret|secret|key ENC)).*/, '\\1 <configuration removed>'
|
18
|
+
cfg.gsub! /(set (?:passwd|password|secondary-secret|rsso-secret|psksecret|secret|key ENC)).*/, '\\1 <configuration removed>'
|
19
19
|
cfg.gsub! /(set private-key).*-+END ENCRYPTED PRIVATE KEY-*"$/m , '\\1 <configuration removed>'
|
20
|
+
cfg.gsub! /(IPS Malicious URL Database).*/, '\\1 <configuration removed>'
|
20
21
|
cfg
|
21
22
|
end
|
22
23
|
|
@@ -38,6 +39,7 @@ class FortiOS < Oxidized::Model
|
|
38
39
|
#do not include if variable "show_autoupdate" is set to false
|
39
40
|
if defined?(vars(:fortios_autoupdate)).nil? || vars(:fortios_autoupdate)
|
40
41
|
cfg << cmd('diagnose autoupdate version') do |cfg|
|
42
|
+
cfg.gsub! /(FDS Address\n---------\n).*/, '\\1IP Address removed'
|
41
43
|
comment cfg.each_line.reject { |line| line.match /Last Update|Result/ }.join
|
42
44
|
end
|
43
45
|
end
|
data/lib/oxidized/model/ftos.rb
CHANGED
@@ -15,6 +15,8 @@ class FTOS < Oxidized::Model
|
|
15
15
|
end
|
16
16
|
|
17
17
|
cmd 'show inventory' do |cfg|
|
18
|
+
# Old versions of FTOS can occasionally return data that triggers encoding errors.
|
19
|
+
cfg.encode!("UTF-8", :invalid => :replace, :undef => :replace, :replace => "")
|
18
20
|
comment cfg
|
19
21
|
end
|
20
22
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Hirschmann < Oxidized::Model
|
2
|
+
|
3
|
+
prompt /^[\(\w\s\w\)]+\s[>|#]+?$/
|
4
|
+
|
5
|
+
comment '## '
|
6
|
+
|
7
|
+
#Handle pager
|
8
|
+
expect /^--More--.*$/ do |data, re|
|
9
|
+
send 'a'
|
10
|
+
data.sub re, ''
|
11
|
+
end
|
12
|
+
|
13
|
+
cmd :all do |cfg|
|
14
|
+
cfg.each_line.to_a[1..-2].join
|
15
|
+
end
|
16
|
+
|
17
|
+
cmd 'show sysinfo' do |cfg|
|
18
|
+
cfg.gsub! /^System Up Time.*\n/, ""
|
19
|
+
cfg.gsub! /^System Date and Time.*\n/, ""
|
20
|
+
cfg.gsub! /^CPU Utilization.*\n/, ""
|
21
|
+
cfg.gsub! /^Memory.*\n/, ""
|
22
|
+
cfg.gsub! /^Average CPU Utilization.*\n/, ""
|
23
|
+
comment cfg
|
24
|
+
end
|
25
|
+
|
26
|
+
cmd 'show running-config' do |cfg|
|
27
|
+
cfg.gsub! /^users.*\n/, ""
|
28
|
+
cfg
|
29
|
+
end
|
30
|
+
|
31
|
+
cfg :telnet do
|
32
|
+
username /^User:/
|
33
|
+
password /^Password:/
|
34
|
+
end
|
35
|
+
|
36
|
+
cfg :telnet, :ssh do
|
37
|
+
post_login 'enable'
|
38
|
+
pre_logout 'logout'
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/lib/oxidized/model/ios.rb
CHANGED
data/lib/oxidized/model/iosxr.rb
CHANGED
data/lib/oxidized/model/ipos.rb
CHANGED
@@ -3,7 +3,7 @@ class IPOS < Oxidized::Model
|
|
3
3
|
# Ericsson SSR (IPOS)
|
4
4
|
# Redback SE (SEOS)
|
5
5
|
|
6
|
-
prompt /^([\[\]\w.@-]+[
|
6
|
+
prompt /^([\[\]\w.@-]+[#:>]\s?)$/
|
7
7
|
comment '! '
|
8
8
|
|
9
9
|
cmd 'show chassis' do |cfg|
|
@@ -52,6 +52,12 @@ class IPOS < Oxidized::Model
|
|
52
52
|
|
53
53
|
cfg :telnet, :ssh do
|
54
54
|
post_login 'terminal length 0'
|
55
|
+
if vars :enable
|
56
|
+
post_login do
|
57
|
+
cmd "enable"
|
58
|
+
cmd vars(:enable)
|
59
|
+
end
|
60
|
+
end
|
55
61
|
pre_logout do
|
56
62
|
send "exit\n"
|
57
63
|
send "n\n"
|
@@ -34,6 +34,8 @@ class IronWare < Oxidized::Model
|
|
34
34
|
cfg.gsub! /(^((.*)Current temp(.*))$)/, '' #remove unwanted lines current temperature
|
35
35
|
cfg.gsub! /Speed = [A-Z-]{2,6} \(\d{2,3}\%\)/, '' #remove unwanted lines Speed Fans
|
36
36
|
cfg.gsub! /current speed is [A-Z]{2,6} \(\d{2,3}\%\)/, ''
|
37
|
+
cfg.gsub! /Fan \d* - STATUS: OK \D*\d*./, '' # Fix for ADX Fan speed reporting
|
38
|
+
cfg.gsub! /\d* deg C/, '' # Fix for ADX temperature reporting
|
37
39
|
cfg.gsub! /([\[]*)1([\]]*)<->([\[]*)2([\]]*)(<->([\[]*)3([\]]*))*/, ''
|
38
40
|
cfg.gsub! /\d{2}\.\d deg-C/, 'XX.X deg-C'
|
39
41
|
if cfg.include? "TEMPERATURE"
|
@@ -50,6 +52,7 @@ class IronWare < Oxidized::Model
|
|
50
52
|
end
|
51
53
|
|
52
54
|
cmd 'show flash' do |cfg|
|
55
|
+
cfg.gsub! /(\d+) bytes/, '' # Fix for ADX flash size
|
53
56
|
comment cfg
|
54
57
|
end
|
55
58
|
|
@@ -67,7 +70,7 @@ class IronWare < Oxidized::Model
|
|
67
70
|
# match expected prompts on both older and newer
|
68
71
|
# versions of IronWare
|
69
72
|
username /^(Please Enter Login Name|Username):/
|
70
|
-
password /^(Please Enter Password
|
73
|
+
password /^(Please Enter Password ?|Password):/
|
71
74
|
end
|
72
75
|
|
73
76
|
#handle pager with enable
|
@@ -8,21 +8,29 @@ class Netgear < Oxidized::Model
|
|
8
8
|
cfg
|
9
9
|
end
|
10
10
|
|
11
|
+
cfg :telnet do
|
12
|
+
username /^User:/
|
13
|
+
end
|
14
|
+
|
11
15
|
cfg :telnet, :ssh do
|
12
16
|
if vars :enable
|
13
17
|
post_login do
|
14
|
-
|
18
|
+
send "enable\n"
|
15
19
|
# Interpret enable: true as meaning we won't be prompted for a password
|
16
20
|
unless vars(:enable).is_a? TrueClass
|
17
21
|
expect /[pP]assword:\s?$/
|
18
|
-
|
22
|
+
send vars(:enable) + "\n"
|
19
23
|
end
|
20
24
|
expect /^.+[#]$/
|
21
25
|
end
|
22
26
|
end
|
23
27
|
post_login 'terminal length 0'
|
24
|
-
|
25
|
-
|
28
|
+
# quit / logout will sometimes prompt the user:
|
29
|
+
#
|
30
|
+
# The system has unsaved changes.
|
31
|
+
# Would you like to save them now? (y/n)
|
32
|
+
#
|
33
|
+
# So it is safer simply to disconnect and not issue a pre_logout command
|
26
34
|
end
|
27
35
|
|
28
36
|
cmd 'show running-config' do |cfg|
|
data/lib/oxidized/model/panos.rb
CHANGED
@@ -39,9 +39,10 @@ class Planet < Oxidized::Model
|
|
39
39
|
|
40
40
|
cfg = cfg.each_line.to_a[0...-2]
|
41
41
|
|
42
|
-
# Strip system time and
|
42
|
+
# Strip system (up)time and temperature
|
43
43
|
cfg = cfg.reject { |line| line.match /System Time\s*:.*/ }
|
44
44
|
cfg = cfg.reject { |line| line.match /System Uptime\s*:.*/ }
|
45
|
+
cfg = cfg.reject { |line| line.match /Temperature\s*:.*/ }
|
45
46
|
|
46
47
|
comment cfg.join
|
47
48
|
end
|
@@ -13,6 +13,11 @@ class PowerConnect < Oxidized::Model
|
|
13
13
|
cfg.each_line.to_a[1..-3].join
|
14
14
|
end
|
15
15
|
|
16
|
+
cmd :secret do |cfg|
|
17
|
+
cfg.gsub! /^username (\S+) password \S+ (.*)/, 'username \1 password <hidden> \2'
|
18
|
+
cfg
|
19
|
+
end
|
20
|
+
|
16
21
|
cmd 'show version' do |cfg|
|
17
22
|
if (@stackable.nil?)
|
18
23
|
@stackable = true if cfg.match /(U|u)nit\s/
|
@@ -30,6 +30,7 @@ class Procurve < Oxidized::Model
|
|
30
30
|
cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>'
|
31
31
|
cfg.gsub! /^(snmp-server host).*/, '\\1 <configuration removed>'
|
32
32
|
cfg.gsub! /^(radius-server host).*/, '\\1 <configuration removed>'
|
33
|
+
cfg.gsub! /^(radius-server key).*/, '\\1 <configuration removed>'
|
33
34
|
cfg
|
34
35
|
end
|
35
36
|
|
@@ -37,6 +38,18 @@ class Procurve < Oxidized::Model
|
|
37
38
|
comment cfg
|
38
39
|
end
|
39
40
|
|
41
|
+
cmd 'show modules' do |cfg|
|
42
|
+
comment cfg
|
43
|
+
end
|
44
|
+
|
45
|
+
cmd 'show interfaces transceiver' do |cfg|
|
46
|
+
comment cfg
|
47
|
+
end
|
48
|
+
|
49
|
+
cmd 'show flash' do |cfg|
|
50
|
+
comment cfg
|
51
|
+
end
|
52
|
+
|
40
53
|
# not supported on all models
|
41
54
|
cmd 'show system-information' do |cfg|
|
42
55
|
cfg = cfg.split("\n")[0..-8].join("\n")
|
@@ -10,11 +10,18 @@ class RouterOS < Oxidized::Model
|
|
10
10
|
comment cfg
|
11
11
|
end
|
12
12
|
|
13
|
-
cmd '/
|
14
|
-
cfg
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
cmd '/system history print' do |cfg|
|
14
|
+
comment cfg
|
15
|
+
end
|
16
|
+
|
17
|
+
post do
|
18
|
+
run_cmd = vars(:remove_secret) ? '/export hide-sensitive' : '/export'
|
19
|
+
cmd run_cmd do |cfg|
|
20
|
+
cfg.gsub! /\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/, '' # strip ANSI colours
|
21
|
+
cfg.gsub! /\\\r\n\s+/, '' # strip new line
|
22
|
+
cfg = cfg.split("\n").select { |line| not line[/^\#\s\w{3}\/\d{2}\/\d{4}.*$/] }
|
23
|
+
cfg.join("\n") + "\n"
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
cfg :telnet do
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class SGOS < Oxidized::Model
|
2
|
+
|
3
|
+
comment '!- '
|
4
|
+
prompt /\w+>|#/
|
5
|
+
|
6
|
+
expect /--More--/ do |data, re|
|
7
|
+
send ' '
|
8
|
+
data.sub re, ''
|
9
|
+
end
|
10
|
+
|
11
|
+
cmd :all do |cfg|
|
12
|
+
cfg.each_line.to_a[1..-3].join
|
13
|
+
end
|
14
|
+
|
15
|
+
cmd 'show licenses' do |cfg|
|
16
|
+
comment cfg
|
17
|
+
end
|
18
|
+
|
19
|
+
cmd 'show general' do |cfg|
|
20
|
+
comment cfg
|
21
|
+
end
|
22
|
+
|
23
|
+
cmd :secret do |cfg|
|
24
|
+
cfg.gsub! /^(security hashed-enable-password).*/, '\\1 <secret hidden>'
|
25
|
+
cfg.gsub! /^(security hashed-password).*/, '\\1 <secret hidden>'
|
26
|
+
cfg
|
27
|
+
end
|
28
|
+
|
29
|
+
cmd 'show configuration expanded noprompts with-keyrings unencrypted' do |cfg|
|
30
|
+
cfg.gsub! /^(!- Local time).*/,""
|
31
|
+
cfg.gsub! /^(archive-configuration encrypted-password).*/, ""
|
32
|
+
cfg.gsub! /^(download encrypted-password).*/, ""
|
33
|
+
cfg
|
34
|
+
end
|
35
|
+
|
36
|
+
cfg :telnet, :ssh do
|
37
|
+
# preferred way to handle additional passwords
|
38
|
+
if vars :enable
|
39
|
+
post_login do
|
40
|
+
send "enable\n"
|
41
|
+
cmd vars(:enable)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
pre_logout 'exit'
|
45
|
+
end
|
46
|
+
end
|