diff options
author | Wild Kat <wk@users.noreply.github.com> | 2018-05-26 23:49:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-26 23:49:29 +0200 |
commit | 39dbb74c527c054007e26ad34c8921d4be6cb638 (patch) | |
tree | d55745153153450fb40e1f591eb861495a6068d9 /lib/oxidized/model | |
parent | defdc69f92b3bcf62b1fd3b5ceac63a7a4e637ae (diff) | |
parent | 42bf10b7bce34ff577c469f6c2f659f3913cbf4a (diff) |
Merge branch 'master' into FortiOS-Push
Diffstat (limited to 'lib/oxidized/model')
96 files changed, 851 insertions, 725 deletions
diff --git a/lib/oxidized/model/acos.rb b/lib/oxidized/model/acos.rb index 47649a2..a2db89c 100644 --- a/lib/oxidized/model/acos.rb +++ b/lib/oxidized/model/acos.rb @@ -3,7 +3,7 @@ class ACOS < Oxidized::Model comment '! ' - ##ACOS prompt changes depending on the state of the device + # ACOS prompt changes depending on the state of the device prompt /^([-\w.\/:?\[\]\(\)]+[#>]\s?)$/ cmd :secret do |cfg| @@ -30,19 +30,19 @@ class ACOS < Oxidized::Model end cmd 'show partition-config all' do |cfg| - cfg.gsub! /(Current configuration).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>' - cfg - end + cfg.gsub! /(Current configuration).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>' + cfg + end cmd 'show running-config all-partitions' do |cfg| - cfg.gsub! /(Current configuration).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>' - cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>' - cfg + cfg.gsub! /(Current configuration).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last updated at).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last saved at).*/, '\\1 <removed>' + cfg.gsub! /(Configuration last synchronized at).*/, '\\1 <removed>' + cfg end cmd 'show aflex all-partitions' do |cfg| @@ -50,7 +50,7 @@ class ACOS < Oxidized::Model end cmd 'show aflex all-partitions' do |cfg| - @partitions_aflex = cfg.lines.each_with_object({}) do |l,h| + @partitions_aflex = cfg.lines.each_with_object({}) do |l, h| h[$1] = [] if l.match /partition: (.+)/ # only consider scripts that have passed syntax check h[h.keys.last] << $1 if l.match /^([\w-]+) +Check/ @@ -66,7 +66,7 @@ class ACOS < Oxidized::Model pre do unless @partitions_aflex.empty? out = [] - @partitions_aflex.each do |partition,arules| + @partitions_aflex.each do |partition, arules| out << "! partition: #{partition}" arules.each do |name| cmd("show aflex #{name} partition #{partition}") do |cfg| @@ -85,7 +85,7 @@ class ACOS < Oxidized::Model username /login:/ password /^Password:/ end - + cfg :telnet, :ssh do # preferred way to handle additional passwords post_login do @@ -98,5 +98,4 @@ class ACOS < Oxidized::Model post_login 'terminal width 0' pre_logout "exit\nexit\nY\r\n" end - end diff --git a/lib/oxidized/model/acsw.rb b/lib/oxidized/model/acsw.rb index 1aee2b6..c0857b3 100644 --- a/lib/oxidized/model/acsw.rb +++ b/lib/oxidized/model/acsw.rb @@ -1,5 +1,4 @@ class ACSW < Oxidized::Model - prompt /([\w.@()\/\\-]+[#>]\s?)/ comment '! ' @@ -25,16 +24,13 @@ class ACSW < Oxidized::Model cfg end - cmd 'show version' do |cfg| comment cfg end - - cmd 'show inventory' do |cfg| - comment cfg - end - + cmd 'show inventory' do |cfg| + comment cfg + end cmd 'show running-config' do |cfg| cfg = cfg.each_line.to_a[3..-1] @@ -63,5 +59,4 @@ class ACSW < Oxidized::Model post_login 'terminal length 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/aen.rb b/lib/oxidized/model/aen.rb index 6d87433..474e6d5 100644 --- a/lib/oxidized/model/aen.rb +++ b/lib/oxidized/model/aen.rb @@ -16,5 +16,4 @@ class AEN < Oxidized::Model cfg :ssh do pre_logout 'exit' end - -end
\ No newline at end of file +end diff --git a/lib/oxidized/model/aireos.rb b/lib/oxidized/model/aireos.rb index ba13120..a0378c7 100644 --- a/lib/oxidized/model/aireos.rb +++ b/lib/oxidized/model/aireos.rb @@ -1,17 +1,16 @@ class Aireos < Oxidized::Model - # AireOS (at least I think that is what it's called, hard to find data) # Used in Cisco WLC 5500 - comment '# ' ## this complains too, can't find real comment char + comment '# ' # this complains too, can't find real comment char prompt /^\([^\)]+\)\s>/ cmd :all do |cfg| cfg.each_line.to_a[1..-2].join end - ##show sysinfo? - ##show switchconfig? + # show sysinfo? + # show switchconfig? cmd 'show udi' do |cfg| cfg = comment clean cfg @@ -51,5 +50,4 @@ class Aireos < Oxidized::Model out = out.join "\n" out << "\n" end - end diff --git a/lib/oxidized/model/alteonos.rb b/lib/oxidized/model/alteonos.rb index 9eacf4e..dec4faf 100644 --- a/lib/oxidized/model/alteonos.rb +++ b/lib/oxidized/model/alteonos.rb @@ -1,5 +1,4 @@ class ALTEONOS < Oxidized::Model - prompt /^\(?.+\)?\s?[#>]/ comment '! ' @@ -11,19 +10,19 @@ class ALTEONOS < Oxidized::Model cfg end - ############################################################################################## - ## Added to remove # - ## # - ##/* Configuration dump taken 14:10:20 Fri Jul 28, 2017 (DST) # - ##/* Configuration last applied at 16:17:05 Fri Jul 14, 2017 # - ##/* Configuration last save at 16:17:43 Fri Jul 14, 2017 # - ##/* Version 29.0.3.12, vXXXXXXXX, Base MAC address XXXXXXXXXXX # - ##/* To restore SSL Offloading configuration and management HTTPS access, # - ##/* it is recommended to include the private keys in the dump. # - ## OR # - ##/* To restore SSL Offloading configuration and management HTTPS access,it is recommended # - ##/* to include the private keys in the dump. # - ## # + ############################################################################################## + # Added to remove # + # # + # /* Configuration dump taken 14:10:20 Fri Jul 28, 2017 (DST) # + # /* Configuration last applied at 16:17:05 Fri Jul 14, 2017 # + # /* Configuration last save at 16:17:43 Fri Jul 14, 2017 # + # /* Version 29.0.3.12, vXXXXXXXX, Base MAC address XXXXXXXXXXX # + # /* To restore SSL Offloading configuration and management HTTPS access, # + # /* it is recommended to include the private keys in the dump. # + # OR # + # /* To restore SSL Offloading configuration and management HTTPS access,it is recommended # + # /* to include the private keys in the dump. # + # # ############################################################################################## cmd 'cfg/dump' do |cfg| @@ -35,19 +34,19 @@ class ALTEONOS < Oxidized::Model cfg end - #Answer for Dispay private keys + # Answer for Dispay private keys expect /^Display private keys\?\s?\[y\/n\]\: $/ do |data, re| send "n\r" data.sub re, '' end - #Answer for sync to peer on exit + # Answer for sync to peer on exit expect /^Confirm Sync to Peer\s?\[y\/n\]\: $/ do |data, re| send "n\r" data.sub re, '' end - #Answer for Unsaved configuration + # Answer for Unsaved configuration expect /^(WARNING: There are unsaved configuration changes).*/ do |data, re| send "n\r" data.sub re, '' @@ -56,5 +55,4 @@ class ALTEONOS < Oxidized::Model cfg :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/alvarion.rb b/lib/oxidized/model/alvarion.rb index 7a4dcc7..8831f49 100644 --- a/lib/oxidized/model/alvarion.rb +++ b/lib/oxidized/model/alvarion.rb @@ -1,5 +1,4 @@ class Alvarion < Oxidized::Model - # Used in Alvarion wisp equipment # Run this command as an instance of Model so we can access node @@ -7,9 +6,6 @@ class Alvarion < Oxidized::Model cmd "#{node.auth[:password]}.cfg" end - cfg :tftp do - end - end diff --git a/lib/oxidized/model/aos.rb b/lib/oxidized/model/aos.rb index ec73b92..fed78c8 100644 --- a/lib/oxidized/model/aos.rb +++ b/lib/oxidized/model/aos.rb @@ -1,8 +1,7 @@ class AOS < Oxidized::Model - # Alcatel-Lucent Operating System # used in OmniSwitch - + comment '! ' cmd :all do |cfg| @@ -10,7 +9,7 @@ class AOS < Oxidized::Model end cmd 'show system' do |cfg| - cfg = cfg.each_line.find{|line|line.match 'Description'} + cfg = cfg.each_line.find { |line| line.match 'Description' } comment cfg.to_s.strip end @@ -34,5 +33,4 @@ class AOS < Oxidized::Model cfg :telnet, :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/aos7.rb b/lib/oxidized/model/aos7.rb index 8d11066..00bee54 100644 --- a/lib/oxidized/model/aos7.rb +++ b/lib/oxidized/model/aos7.rb @@ -1,8 +1,7 @@ class AOS7 < Oxidized::Model - # Alcatel-Lucent Operating System Version 7 (Linux based) # used in OmniSwitch 6900/10k - + comment '! ' cmd :all do |cfg, cmdstring| @@ -11,7 +10,7 @@ class AOS7 < Oxidized::Model end cmd 'show system' do |cfg| - cfg = cfg.each_line.find{|line|line.match 'Description'} + cfg = cfg.each_line.find { |line| line.match 'Description' } comment cfg.to_s.strip + "\n" end diff --git a/lib/oxidized/model/aosw.rb b/lib/oxidized/model/aosw.rb index 71fde2e..7543353 100644 --- a/lib/oxidized/model/aosw.rb +++ b/lib/oxidized/model/aosw.rb @@ -1,14 +1,13 @@ class AOSW < Oxidized::Model - # AOSW Aruba Wireless, IAP, Instant Controller and Mobility Access Switches # Used in Alcatel OAW-4750 WLAN controller # Also Dell controllers - + # HPE Aruba Switches should use a different model as the software is based on the HP Procurve line. - + # Support for IAP & Instant Controller tested with 115, 205, 215 & 325 running 6.4.4.8-4.2.4.5_57965 # Support for Mobility Access Switches tested with S2500-48P & S2500-24P running 7.4.1.4_54199 and S2500-24P running 7.4.1.7_57823 - # All IAPs connected to a Instant Controller will have the same config output. Only the controller needs to be monitored. + # All IAPs connected to a Instant Controller will have the same config output. Only the controller needs to be monitored. comment '# ' prompt /^\(?.+\)?\s[#>]/ @@ -26,11 +25,11 @@ class AOSW < Oxidized::Model cfg.gsub!(/ sha (\S+)/, ' sha <secret removed>') cfg.gsub!(/ des (\S+)/, ' des <secret removed>') cfg.gsub!(/mobility-manager (\S+) user (\S+) (\S+)/, 'mobility-manager \1 user \2 <secret removed>') - cfg.gsub!(/mgmt-user (\S+) (root|guest\-provisioning|network\-operations|read\-only|location\-api\-mgmt) (\S+)$/, 'mgmt-user \1 \2 <secret removed>') #MAS & Wireless Controler - cfg.gsub!(/mgmt-user (\S+) (\S+)( (read\-only|guest\-mgmt))?$/, 'mgmt-user \1 <secret removed> \3') #IAP -#MAS format: mgmt-user <username> <accesslevel> <password hash> -#IAP format (root user): mgmt-user <username> <password hash> -#IAP format: mgmt-user <username> <password hash> <access level> + cfg.gsub!(/mgmt-user (\S+) (root|guest\-provisioning|network\-operations|read\-only|location\-api\-mgmt) (\S+)$/, 'mgmt-user \1 \2 <secret removed>') # MAS & Wireless Controler + cfg.gsub!(/mgmt-user (\S+) (\S+)( (read\-only|guest\-mgmt))?$/, 'mgmt-user \1 <secret removed> \3') # IAP + # MAS format: mgmt-user <username> <accesslevel> <password hash> + # IAP format (root user): mgmt-user <username> <password hash> + # IAP format: mgmt-user <username> <password hash> <access level> cfg.gsub!(/key (\S+)$/, 'key <secret removed>') cfg.gsub!(/wpa-passphrase (\S+)$/, 'wpa-passphrase <secret removed>') cfg.gsub!(/bkup-passwords (\S+)$/, 'bkup-passwords <secret removed>') @@ -40,22 +39,22 @@ class AOSW < Oxidized::Model end cmd 'show version' do |cfg| - cfg = cfg.each_line.select { |line| not line.match /(Switch|AP) uptime/i } + cfg = cfg.each_line.reject { |line| line.match /(Switch|AP) uptime/i } rstrip_cfg comment cfg.join end cmd 'show inventory' do |cfg| - cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS) + cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS) rstrip_cfg clean cfg end cmd 'show slots' do |cfg| - cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS) + cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS) rstrip_cfg comment cfg end cmd 'show license' do |cfg| - cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ #Don't show for unsupported devices (IAP and MAS) + cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS) rstrip_cfg comment cfg end @@ -112,5 +111,4 @@ class AOSW < Oxidized::Model out = comment out.join "\n" out << "\n" end - end diff --git a/lib/oxidized/model/apc_aos.rb b/lib/oxidized/model/apc_aos.rb index 530d436..5a4d232 100644 --- a/lib/oxidized/model/apc_aos.rb +++ b/lib/oxidized/model/apc_aos.rb @@ -1,11 +1,8 @@ class Apc_aos < Oxidized::Model - cmd 'config.ini' do |cfg| cfg.gsub! /^; Configuration file\, generated on.*/, '' end cfg :ftp do end - end - diff --git a/lib/oxidized/model/arbos.rb b/lib/oxidized/model/arbos.rb index 389f3f6..51b269d 100644 --- a/lib/oxidized/model/arbos.rb +++ b/lib/oxidized/model/arbos.rb @@ -1,9 +1,8 @@ -class ARBOS < Oxidized::Model - +class ARBOS < Oxidized::Model # Arbor OS model # prompt /^[\S\s]+\n([\w.@-]+[:\/#>]+)\s?$/ - comment '# ' + comment '# ' cmd 'system hardware' do |cfg| cfg.gsub! /^Boot\ time\:\s.+/, '' # Remove boot timer diff --git a/lib/oxidized/model/aricentiss.rb b/lib/oxidized/model/aricentiss.rb index 8821801..77b78f4 100644 --- a/lib/oxidized/model/aricentiss.rb +++ b/lib/oxidized/model/aricentiss.rb @@ -4,8 +4,7 @@ # 0 SSE-G48-TG4 (P2-01) 1.0.16-9 class AricentISS < Oxidized::Model - - prompt (/^(\e\[27m)?[ \r]*\w+# ?$/) + prompt (/^(\e\[27m)?[ \r]*[\w-]+# ?$/) cfg :ssh do # "pagination" was misspelled in some (earlier) versions (at least 1.0.16-9) @@ -49,5 +48,4 @@ class AricentISS < Oxidized::Model l }.join.gsub(/ +$/, '') end - end diff --git a/lib/oxidized/model/asa.rb b/lib/oxidized/model/asa.rb index 9df4206..dfd94b1 100644 --- a/lib/oxidized/model/asa.rb +++ b/lib/oxidized/model/asa.rb @@ -1,5 +1,4 @@ class ASA < Oxidized::Model - # Cisco ASA model # # Only SSH supported for the sake of security @@ -27,7 +26,7 @@ class ASA < Oxidized::Model cmd 'show version' do |cfg| # avoid commits due to uptime / ixo-router01 up 2 mins 28 secs / ixo-router01 up 1 days 2 hours - cfg = cfg.each_line.select { |line| not line.match /(\s+up\s+\d+\s+)|(.*days.*)/ } + cfg = cfg.each_line.reject { |line| line.match /(\s+up\s+\d+\s+)|(.*days.*)/ } cfg = cfg.join comment cfg end @@ -54,48 +53,47 @@ class ASA < Oxidized::Model post_login 'terminal pager 0' pre_logout 'exit' end - + def single_context - # Single context mode - cmd 'more system:running-config' do |cfg| - cfg = cfg.each_line.to_a[3..-1].join - cfg.gsub! /^: [^\n]*\n/, '' - # backup any xml referenced in the configuration. - anyconnect_profiles = cfg.scan(Regexp.new('(\sdisk0:/.+\.xml)')).flatten - anyconnect_profiles.each do |profile| - cfg << (comment profile + "\n" ) - cmd ("more" + profile) do |xml| - cfg << (comment xml) - end + # Single context mode + cmd 'more system:running-config' do |cfg| + cfg = cfg.each_line.to_a[3..-1].join + cfg.gsub! /^: [^\n]*\n/, '' + # backup any xml referenced in the configuration. + anyconnect_profiles = cfg.scan(Regexp.new('(\sdisk0:/.+\.xml)')).flatten + anyconnect_profiles.each do |profile| + cfg << (comment profile + "\n") + cmd ("more" + profile) do |xml| + cfg << (comment xml) end - # if DAP is enabled, also backup dap.xml - if cfg.rindex(/dynamic-access-policy-record\s(?!DfltAccessPolicy)/) - cfg << (comment "disk0:/dap.xml\n") - cmd "more disk0:/dap.xml" do |xml| - cfg << (comment xml) - end + end + # if DAP is enabled, also backup dap.xml + if cfg.rindex(/dynamic-access-policy-record\s(?!DfltAccessPolicy)/) + cfg << (comment "disk0:/dap.xml\n") + cmd "more disk0:/dap.xml" do |xml| + cfg << (comment xml) end - cfg end + cfg + end end def multiple_context - # Multiple context mode - cmd 'changeto system' do |cfg| - cmd 'show running-config' do |systemcfg| - allcfg = "\n\n" + systemcfg + "\n\n" - contexts = systemcfg.scan(/^context (\S+)$/) - files = systemcfg.scan(/config-url (\S+)$/) - contexts.each_with_index do |cont, i| - allcfg = allcfg + "\n\n----------========== [ CONTEXT " + cont.join(" ") + " FILE " + files[i].join(" ") + " ] ==========----------\n\n" - cmd "more " + files[i].join(" ") do |cfgcontext| - allcfg = allcfg + "\n\n" + cfgcontext - end + # Multiple context mode + cmd 'changeto system' do |cfg| + cmd 'show running-config' do |systemcfg| + allcfg = "\n\n" + systemcfg + "\n\n" + contexts = systemcfg.scan(/^context (\S+)$/) + files = systemcfg.scan(/config-url (\S+)$/) + contexts.each_with_index do |cont, i| + allcfg = allcfg + "\n\n----------========== [ CONTEXT " + cont.join(" ") + " FILE " + files[i].join(" ") + " ] ==========----------\n\n" + cmd "more " + files[i].join(" ") do |cfgcontext| + allcfg = allcfg + "\n\n" + cfgcontext end - cfg = allcfg end - cfg + cfg = allcfg end + cfg + end end - end diff --git a/lib/oxidized/model/asyncos.rb b/lib/oxidized/model/asyncos.rb index 875690b..9e4d10e 100644 --- a/lib/oxidized/model/asyncos.rb +++ b/lib/oxidized/model/asyncos.rb @@ -1,49 +1,46 @@ class AsyncOS < Oxidized::Model + # ESA prompt "(mail.example.com)> " or "mail.example.com> " + prompt /^\r*([(]?[\w. ]+[)]?[#>]\s+)$/ + comment '! ' - # ESA prompt "(mail.example.com)> " - prompt /^\r*([(][\w. ]+[)][#>]\s+)$/ - comment '! ' - - # Select passphrase display option - expect /\[\S+\]>\s/ do |data, re| - send "3\n" - data.sub re, '' - end - - # handle paging - expect /-Press Any Key For More-+.*$/ do |data, re| - send " " - data.sub re, '' - end - - cmd 'version' do |cfg| - comment cfg - end + # Select passphrase display option + expect /\[\S+\]>\s/ do |data, re| + send "3\n" + data.sub re, '' + end - cmd 'showconfig' do |cfg| - #Delete hour and date which change each run - #cfg.gsub! /\sCurrent Time: \S+\s\S+\s+\S+\s\S+\s\S+/, ' Current Time:' - # Delete select passphrase display option - cfg.gsub! /Choose the passphrase option:/, '' - cfg.gsub! /1. Mask passphrases \(Files with masked passphrases cannot be loaded using/, '' - cfg.gsub! /loadconfig command\)/, '' - cfg.gsub! /2. Encrypt passphrases/, '' - cfg.gsub! /3. Plain passphrases/, '' - cfg.gsub! /^3$/, '' - #Delete space - cfg.gsub! /\n\s{25,26}/, '' - #Delete after line - cfg.gsub! /([-\\\/,.\w><@]+)(\s{25,27})/,"\\1" - # Add a carriage return - cfg.gsub! /([-\\\/,.\w><@]+)(\s{6})([-\\\/,.\w><@]+)/,"\\1\n\\2\\3" - # Delete prompt - cfg.gsub! /^\r*([(][\w. ]+[)][#>]\s+)$/, '' - cfg + # handle paging + expect /-Press Any Key For More-+.*$/ do |data, re| + send " " + data.sub re, '' + end - end - - cfg :ssh do - pre_logout "exit" - end - + cmd 'version' do |cfg| + comment cfg + end + + cmd 'showconfig' do |cfg| + # Delete hour and date which change each run + # cfg.gsub! /\sCurrent Time: \S+\s\S+\s+\S+\s\S+\s\S+/, ' Current Time:' + # Delete select passphrase display option + cfg.gsub! /Choose the passphrase option:/, '' + cfg.gsub! /1. Mask passphrases \(Files with masked passphrases cannot be loaded using/, '' + cfg.gsub! /loadconfig command\)/, '' + cfg.gsub! /2. Encrypt passphrases/, '' + cfg.gsub! /3. Plain passphrases/, '' + cfg.gsub! /^3$/, '' + # Delete space + cfg.gsub! /\n\s{25,26}/, '' + # Delete after line + cfg.gsub! /([-\\\/,.\w><@]+)(\s{25,27})/, "\\1" + # Add a carriage return + cfg.gsub! /([-\\\/,.\w><@]+)(\s{6})([-\\\/,.\w><@]+)/, "\\1\n\\2\\3" + # Delete prompt + cfg.gsub! /^\r*([(][\w. ]+[)][#>]\s+)$/, '' + cfg + end + + cfg :ssh do + pre_logout "exit" + end end diff --git a/lib/oxidized/model/audiocodes.rb b/lib/oxidized/model/audiocodes.rb index b7ee70e..2c77abb 100644 --- a/lib/oxidized/model/audiocodes.rb +++ b/lib/oxidized/model/audiocodes.rb @@ -1,20 +1,17 @@ class AudioCodes < Oxidized::Model - -# Pull config from AudioCodes Mediant devices from version > 7.0 + # Pull config from AudioCodes Mediant devices from version > 7.0 prompt /^\r?([\w.@() -]+[#>]\s?)$/ - comment '## ' + comment '## ' expect /\s*--MORE--$/ do |data, re| - send ' ' data.sub re, '' - end cmd 'show running-config' do |cfg| - cfg + cfg end cfg :ssh do @@ -22,11 +19,10 @@ class AudioCodes < Oxidized::Model password /^.+password:\s$/ pre_logout 'exit' end - + cfg :telnet do username /^Username:\s$/ password /^Password:\s$/ pre_logout 'exit' end - end diff --git a/lib/oxidized/model/awplus.rb b/lib/oxidized/model/awplus.rb index 1d8fbcd..7c88d60 100644 --- a/lib/oxidized/model/awplus.rb +++ b/lib/oxidized/model/awplus.rb @@ -1,27 +1,26 @@ class AWPlus < Oxidized::Model + # Allied Telesis Alliedware Plus Model# + # https://www.alliedtelesis.com/products/software/AlliedWare-Plus - #Allied Telesis Alliedware Plus Model# - #https://www.alliedtelesis.com/products/software/AlliedWare-Plus - prompt /^(\r?[\w.@:\/-]+[#>]\s?)$/ - comment '! ' + comment '! ' - #Avoids needing "term length 0" to display full config file. - expect /--More--/ do |data, re| - send ' ' - data.sub re, '' - end + # Avoids needing "term length 0" to display full config file. + expect /--More--/ do |data, re| + send ' ' + data.sub re, '' + end - #Removes gibberish pager output e.g. VT100 escape codes + # Removes gibberish pager output e.g. VT100 escape codes cmd :all do |cfg| cfg.gsub! /\e\[K/, '' # example how to handle pager - cleareol EL0 cfg.gsub! /\e\[7m\e\[m/, '' # example how to handle pager - Reverse SGR7 - cfg.gsub! /\r/, '' # Filters rogue ^M - see issue #415 + cfg.gsub! /\r/, '' # Filters rogue ^M - see issue #415 cfg.each_line.to_a[1..-2].join end - #Remove passwords from config file. - #Add vars "remove_secret: true" to global oxidized config file to enable. + # Remove passwords from config file. + # Add vars "remove_secret: true" to global oxidized config file to enable. cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' @@ -34,52 +33,52 @@ class AWPlus < Oxidized::Model cfg end - #Adds "Show system" output to start of config. + # Adds "Show system" output to start of config. cmd 'Show System' do |cfg| - comment cfg.insert(0,"--------------------------------------------------------------------------------! \n") - #Unhash below to write a comment in the config file. - cfg.insert(0,"Starting: Show system cmd \n") + comment cfg.insert(0, "--------------------------------------------------------------------------------! \n") + # Unhash below to write a comment in the config file. + cfg.insert(0, "Starting: Show system cmd \n") cfg << "\n \nEnding: show system cmd" comment cfg << "\n--------------------------------------------------------------------------------! \n \n" - #Removes the following lines from "show system" in output file. This ensures oxidized diffs are meaningful. - comment cfg.each_line.reject { |line| - line.match /^$\n/ or #Remove blank lines in "sh sys" - line.match /System Status\s*.*/ or - line.match /RAM\s*:.*/ or - line.match /Uptime\s*:.*/ or - line.match /Flash\s*:.*/ or - line.match /Current software\s*:.*/ or - line.match /Software version\s*:.*/ or - line.match /Build date\s*:.*/ }.join + # Removes the following lines from "show system" in output file. This ensures oxidized diffs are meaningful. + comment cfg.each_line.reject { |line| + line.match /^$\n/ or # Remove blank lines in "sh sys" + line.match /System Status\s*.*/ or + line.match /RAM\s*:.*/ or + line.match /Uptime\s*:.*/ or + line.match /Flash\s*:.*/ or + line.match /Current software\s*:.*/ or + line.match /Software version\s*:.*/ or + line.match /Build date\s*:.*/ + } .join end - - #Actually get the devices running config# + + # Actually get the devices running config# cmd 'show running-config' do |cfg| cfg end - - #Config required for telnet to detect username prompt + + # Config required for telnet to detect username prompt cfg :telnet do username /login:\s/ - end + end - #Main login config - cfg :telnet, :ssh do + # Main login config + cfg :telnet, :ssh do post_login do if vars :enable send "enable\n" expect /^Password:\s/ cmd vars(:enable) + "\r\n" else - cmd 'enable' # Required for Priv-Exec users without enable PW to be put into "enable mode". + cmd 'enable' # Required for Priv-Exec users without enable PW to be put into "enable mode". end -# cmd 'terminal length 0' #set so the entire config is output without intervention. + # cmd 'terminal length 0' #set so the entire config is output without intervention. end pre_logout do -# cmd 'terminal no length' #Sets term length back to default on exit. - send "exit\r\n" + # cmd 'terminal no length' #Sets term length back to default on exit. + send "exit\r\n" end - end - + end end diff --git a/lib/oxidized/model/boss.rb b/lib/oxidized/model/boss.rb index 02201a1..0adf4c0 100644 --- a/lib/oxidized/model/boss.rb +++ b/lib/oxidized/model/boss.rb @@ -1,5 +1,5 @@ class Boss < Oxidized::Model - # Avaya Baystack Operating System Software(BOSS) + # Extreme Baystack Operating System Software(BOSS) # Created by danielcoxman@gmail.com # May 15, 2017 # This was tested on ers3510, ers5530, ers4850, ers5952 @@ -16,7 +16,7 @@ class Boss < Oxidized::Model data.sub re, '' end - # Handle the Failed retries since last login + # Handle the Failed retries since last login # no known way to disable other than to implement radius authentication expect /Press ENTER to continue/ do |data, re| send "\n" @@ -28,8 +28,10 @@ class Boss < Oxidized::Model expect /ommand Line Interface\.\.\./ do |data, re| send "c" data.sub re, '' + send "\n" + data.sub re, '' end - + # needed for proper formatting cmd('') { |cfg| comment "#{cfg}\n" } @@ -43,7 +45,7 @@ class Boss < Oxidized::Model cfg.gsub! /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} .*/, '' comment "#{cfg}\n" end - + # if a stack then collect the stacking information cmd 'show stack-info' do |cfg| if @stack @@ -72,5 +74,4 @@ class Boss < Oxidized::Model post_login 'terminal length 0' post_login 'terminal width 132' end - end diff --git a/lib/oxidized/model/br6910.rb b/lib/oxidized/model/br6910.rb index df93793..1e79da3 100644 --- a/lib/oxidized/model/br6910.rb +++ b/lib/oxidized/model/br6910.rb @@ -1,45 +1,43 @@ -
-class BR6910 < Oxidized::Model
-
- prompt /^([\w.@()-]+[#>]\s?)$/
- comment '! '
-
- # not possible to disable paging prior to show running-config
- expect /^((.*)Others to exit ---(.*))$/ do |data, re|
- send 'a'
- data.sub re, ''
- end
-
- cmd :all do |cfg|
- # sometimes br6910s inserts arbitrary whitespace after commands are
- # issued on the CLI, from run to run. this normalises the output.
- cfg.each_line.to_a[1..-2].drop_while { |e| e.match /^\s+$/ }.join
- end
-
- cmd 'show version' do |cfg|
- comment cfg
- end
-
- # show flash is not possible on a brocade 6910, do dir instead
- # to see flash contents (includes config file names)
- cmd 'dir' do |cfg|
- comment cfg
- end
-
- cmd 'show running-config' do |cfg|
- arr = cfg.each_line.to_a
- arr[2..-1].join unless arr.length < 2
- end
-
- cfg :telnet do
- username /^Username:/
- password /^Password:/
- end
-
- # post login and post logout
- cfg :telnet, :ssh do
- post_login ''
- pre_logout 'exit'
- end
-
-end
+ +class BR6910 < Oxidized::Model + prompt /^([\w.@()-]+[#>]\s?)$/ + comment '! ' + + # not possible to disable paging prior to show running-config + expect /^((.*)Others to exit ---(.*))$/ do |data, re| + send 'a' + data.sub re, '' + end + + cmd :all do |cfg| + # sometimes br6910s inserts arbitrary whitespace after commands are + # issued on the CLI, from run to run. this normalises the output. + cfg.each_line.to_a[1..-2].drop_while { |e| e.match /^\s+$/ }.join + end + + cmd 'show version' do |cfg| + comment cfg + end + + # show flash is not possible on a brocade 6910, do dir instead + # to see flash contents (includes config file names) + cmd 'dir' do |cfg| + comment cfg + end + + cmd 'show running-config' do |cfg| + arr = cfg.each_line.to_a + arr[2..-1].join unless arr.length < 2 + end + + cfg :telnet do + username /^Username:/ + password /^Password:/ + end + + # post login and post logout + cfg :telnet, :ssh do + post_login '' + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/c4cmts.rb b/lib/oxidized/model/c4cmts.rb index 150029c..8ea27c6 100644 --- a/lib/oxidized/model/c4cmts.rb +++ b/lib/oxidized/model/c4cmts.rb @@ -1,15 +1,14 @@ class C4CMTS < Oxidized::Model - # Arris C4 CMTS prompt /^([\w.@:\/-]+[#>]\s?)$/ comment '! ' cmd :all do |cfg| - cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[1..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /(.+)\s+encrypted-password\s+\w+\s+(.*)/, '\\1 <secret hidden> \\2' cfg.gsub! /(snmp-server community)\s+".*"\s+(.*)/, '\\1 <secret hidden> \\2' cfg.gsub! /(tacacs.*\s+key)\s+".*"\s+(.*)/, '\\1 <secret hidden> \\2' @@ -25,7 +24,7 @@ class C4CMTS < Oxidized::Model cmd 'show version' do |cfg| # remove uptime readings at char 55 and beyond - cfg = cfg.each_line.map{|line|line.rstrip.slice(0..54)}.join("\n") + "\n" + cfg = cfg.each_line.map { |line| line.rstrip.slice(0..54) }.join("\n") + "\n" comment cfg end @@ -48,5 +47,4 @@ class C4CMTS < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/catos.rb b/lib/oxidized/model/catos.rb index bac9eec..e97a0b6 100644 --- a/lib/oxidized/model/catos.rb +++ b/lib/oxidized/model/catos.rb @@ -1,5 +1,4 @@ class Catos < Oxidized::Model - prompt /^[\w.@-]+>\s?(\(enable\) )?$/ comment '# ' @@ -39,5 +38,4 @@ class Catos < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/cisconga.rb b/lib/oxidized/model/cisconga.rb index 73fb51c..9764351 100644 --- a/lib/oxidized/model/cisconga.rb +++ b/lib/oxidized/model/cisconga.rb @@ -1,5 +1,4 @@ class CiscoNGA < Oxidized::Model - comment '# ' prompt /([\w.@-]+[#>]\s?)$/ @@ -10,10 +9,9 @@ class CiscoNGA < Oxidized::Model cmd 'show configuration' do |cfg| cfg end - + cfg :ssh do post_login 'terminal length 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/ciscosma.rb b/lib/oxidized/model/ciscosma.rb index a52e38a..5a34f86 100644 --- a/lib/oxidized/model/ciscosma.rb +++ b/lib/oxidized/model/ciscosma.rb @@ -1,45 +1,42 @@ class CiscoSMA < Oxidized::Model + # SMA prompt "mail.example.com> " + prompt /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/ + comment '! ' - # SMA prompt "mail.example.com> " - prompt /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/ - comment '! ' - - # Select passphrase display option - expect /using loadconfig command\. \[Y\]\>/ do |data, re| - send "y\n" - data.sub re, '' - end - - # handle paging - expect /-Press Any Key For More-+.*$/ do |data, re| - send " " - data.sub re, '' - end - - cmd 'version' do |cfg| - comment cfg - end + # Select passphrase display option + expect /using loadconfig command\. \[Y\]\>/ do |data, re| + send "y\n" + data.sub re, '' + end - cmd 'showconfig' do |cfg| - #Delete hour and date which change each run - #cfg.gsub! /\sCurrent Time: \S+\s\S+\s+\S+\s\S+\s\S+/, ' Current Time:' - # Delete select passphrase display option - cfg.gsub! /Do you want to mask the password\? Files with masked passwords cannot be loaded/, '' - cfg.gsub! /^\s+y/, '' - # Delete space - cfg.gsub! /\n\s{25}/, '' - # Delete after line - cfg.gsub! /([\/\-,.\w><@]+)(\s{27})/,"\\1" - # Add a carriage return - cfg.gsub! /([\/\-,.\w><@]+)(\s{6,8})([\/\-,.\w><@]+)/,"\\1\n\\2\\3" - # Delete prompt - cfg.gsub! /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/, '' - cfg + # handle paging + expect /-Press Any Key For More-+.*$/ do |data, re| + send " " + data.sub re, '' + end - end - - cfg :ssh do - pre_logout "exit" - end - + cmd 'version' do |cfg| + comment cfg + end + + cmd 'showconfig' do |cfg| + # Delete hour and date which change each run + # cfg.gsub! /\sCurrent Time: \S+\s\S+\s+\S+\s\S+\s\S+/, ' Current Time:' + # Delete select passphrase display option + cfg.gsub! /Do you want to mask the password\? Files with masked passwords cannot be loaded/, '' + cfg.gsub! /^\s+y/, '' + # Delete space + cfg.gsub! /\n\s{25}/, '' + # Delete after line + cfg.gsub! /([\/\-,.\w><@]+)(\s{27})/, "\\1" + # Add a carriage return + cfg.gsub! /([\/\-,.\w><@]+)(\s{6,8})([\/\-,.\w><@]+)/, "\\1\n\\2\\3" + # Delete prompt + cfg.gsub! /^\r*([-\w. ]+\.[-\w. ]+\.[-\w. ]+[#>]\s+)$/, '' + cfg + end + + cfg :ssh do + pre_logout "exit" + end end diff --git a/lib/oxidized/model/ciscosmb.rb b/lib/oxidized/model/ciscosmb.rb index deb4768..ef6f4e6 100644 --- a/lib/oxidized/model/ciscosmb.rb +++ b/lib/oxidized/model/ciscosmb.rb @@ -1,5 +1,4 @@ class CiscoSMB < Oxidized::Model - # Cisco Small Business 300, 500, and ESW2 series switches # http://www.cisco.com/c/en/us/support/switches/small-business-300-series-managed-switches/products-release-notes-list.html @@ -24,11 +23,11 @@ class CiscoSMB < Oxidized::Model cmd 'show version' do |cfg| comment cfg end - + cmd 'show system' do |cfg| comment cfg end - + cmd 'show bootvar' do |cfg| comment cfg end @@ -49,8 +48,7 @@ class CiscoSMB < Oxidized::Model post_login 'terminal datadump' # Disable pager post_login 'terminal width 0' post_login 'terminal len 0' - pre_logout 'exit' #exit returns to previous priv level, no way to quit from exec(#) + pre_logout 'exit' # exit returns to previous priv level, no way to quit from exec(#) pre_logout 'exit' end - end diff --git a/lib/oxidized/model/comnetms.rb b/lib/oxidized/model/comnetms.rb new file mode 100644 index 0000000..1ce4601 --- /dev/null +++ b/lib/oxidized/model/comnetms.rb @@ -0,0 +1,43 @@ +class ComnetMS < Oxidized::Model + # Comnet Microsemi Switch + prompt /^\r?([\w.@()-]+[#>]\s?)$/ + comment '! ' + + cmd :all do |cfg| + cfg.each_line.to_a[1..-2].join + end + + cmd 'show running-config' do |cfg| + cfg.gsub! "\n\r", "\n" + cfg.gsub! /^[\r\n\s]*Building configuration\.\.\.\n/, '' + cfg.gsub! /^end\n/, '' + cfg + end + + cmd 'show version' do |cfg| + cfg.gsub! "\n\r", "\n" + cfg.gsub! /^MEMORY\s*:.*\n/, '' + cfg.gsub! /^FLASH\s*:.*\n/, '' + cfg.gsub! /^Previous Restart\s*:.*\n/, '' + cfg.gsub! /^System Time\s*:.*\n/, '' + cfg.gsub! /^System Uptime\s*:.*\n/, '' + comment cfg + end + + cfg :telnet do + username /^Username:/i + password /^Password:/i + end + + cfg :telnet, :ssh do + if vars :enable + post_login do + send "enable\n" + cmd vars(:enable) + end + end + post_login 'terminal length 0' + post_login 'terminal width 0' + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/comware.rb b/lib/oxidized/model/comware.rb index a5b7190..f20cd4d 100644 --- a/lib/oxidized/model/comware.rb +++ b/lib/oxidized/model/comware.rb @@ -1,23 +1,23 @@ class Comware < Oxidized::Model # HP (A-series)/H3C/3Com Comware - + # sometimes the prompt might have a leading nul or trailing ASCII Bell (^G) prompt /^\0*(<[\w.-]+>).?$/ comment '# ' # example how to handle pager - #expect /^\s*---- More ----$/ do |data, re| + # expect /^\s*---- More ----$/ do |data, re| # send ' ' # data.sub re, '' - #end + # end cmd :all do |cfg| - #cfg.gsub! /^.*\e\[42D/, '' # example how to handle pager - #skip rogue ^M + # cfg.gsub! /^.*\e\[42D/, '' # example how to handle pager + # skip rogue ^M cfg = cfg.gsub /\r/, '' cfg.each_line.to_a[1..-2].join end - + cmd :secret do |cfg| cfg.gsub! /^( snmp-agent community).*/, '\\1 <configuration removed>' cfg.gsub! /^( password hash).*/, '\\1 <configuration removed>' @@ -47,7 +47,7 @@ class Comware < Oxidized::Model end cmd 'display version' do |cfg| - cfg = cfg.each_line.select {|l| not l.match /uptime/i }.join + cfg = cfg.each_line.reject { |l| l.match /uptime/i }.join comment cfg end diff --git a/lib/oxidized/model/coriant8600.rb b/lib/oxidized/model/coriant8600.rb index a48ffa5..2e8bb76 100644 --- a/lib/oxidized/model/coriant8600.rb +++ b/lib/oxidized/model/coriant8600.rb @@ -1,7 +1,6 @@ class Coriant8600 < Oxidized::Model - comment '# ' - + prompt /^[^\s#>]+[#>]$/ cmd 'show hw-inventory' do |cfg| @@ -11,7 +10,7 @@ class Coriant8600 < Oxidized::Model cmd 'show flash' do |cfg| comment cfg end - + cmd 'show run' do |cfg| cfg end @@ -20,11 +19,10 @@ class Coriant8600 < Oxidized::Model username /^user name:$/ password /^password:$/ end - + cfg :telnet, :ssh do pre_logout 'exit' post_login 'enable' post_login 'terminal more off' end - end diff --git a/lib/oxidized/model/coriantgroove.rb b/lib/oxidized/model/coriantgroove.rb index 4fc44b7..9d81e82 100644 --- a/lib/oxidized/model/coriantgroove.rb +++ b/lib/oxidized/model/coriantgroove.rb @@ -1,11 +1,10 @@ class CoriantGroove < Oxidized::Model - comment '# ' - + prompt /^(\w+@.*>\s*)$/ cmd :all do |cfg| - cfg.each_line.to_a[1..-3].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[1..-3].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'show inventory' do |cfg| @@ -17,7 +16,7 @@ class CoriantGroove < Oxidized::Model cfg = cfg.each_line.to_a[0..-2].join comment cfg end - + cmd 'show config | display commands' do |cfg| cfg.each_line.to_a[1..-1].join end @@ -26,5 +25,4 @@ class CoriantGroove < Oxidized::Model post_login 'set -f cli-config cli-columns 65535' pre_logout 'quit -f' end - end diff --git a/lib/oxidized/model/corianttmos.rb b/lib/oxidized/model/corianttmos.rb index 76603f6..bc9618e 100644 --- a/lib/oxidized/model/corianttmos.rb +++ b/lib/oxidized/model/corianttmos.rb @@ -1,7 +1,6 @@ class CoriantTmos < Oxidized::Model - comment '# ' - + prompt /^[^\s#]+#\s$/ cmd 'show node extensive' do |cfg| @@ -21,5 +20,4 @@ class CoriantTmos < Oxidized::Model pre_logout 'exit' post_login 'enable config terminal length 0' end - end diff --git a/lib/oxidized/model/cumulus.rb b/lib/oxidized/model/cumulus.rb index 20acb8a..334e1e4 100644 --- a/lib/oxidized/model/cumulus.rb +++ b/lib/oxidized/model/cumulus.rb @@ -1,85 +1,81 @@ class Cumulus < Oxidized::Model - prompt /^((\w*)@(.*)):/ - comment '# ' - - - #add a comment in the final conf + comment '# ' + + # add a comment in the final conf def add_comment comment - "\n###### #{comment} ######\n" + "\n###### #{comment} ######\n" end cmd :all do |cfg| cfg.each_line.to_a[1..-2].join end - - #show the persistent configuration + + # show the persistent configuration pre do cfg = add_comment 'THE HOSTNAME' cfg += cmd 'cat /etc/hostname' - + cfg += add_comment 'THE HOSTS' cfg += cmd 'cat /etc/hosts' - + cfg += add_comment 'THE INTERFACES' cfg += cmd 'grep -r "" /etc/network/interface* | cut -d "/" -f 4-' - + cfg += add_comment 'RESOLV.CONF' cfg += cmd 'cat /etc/resolv.conf' - + cfg += add_comment 'NTP.CONF' cfg += cmd 'cat /etc/ntp.conf' - + cfg += add_comment 'IP Routes' cfg += cmd 'netstat -rn' - + cfg += add_comment 'SNMP settings' cfg += cmd 'cat /etc/snmp/snmpd.conf' - + cfg += add_comment 'QUAGGA DAEMONS' cfg += cmd 'cat /etc/quagga/daemons' - + cfg += add_comment 'QUAGGA ZEBRA' cfg += cmd 'cat /etc/quagga/zebra.conf' - + cfg += add_comment 'QUAGGA BGP' cfg += cmd 'cat /etc/quagga/bgpd.conf' - + cfg += add_comment 'QUAGGA OSPF' cfg += cmd 'cat /etc/quagga/ospfd.conf' - + cfg += add_comment 'QUAGGA OSPF6' cfg += cmd 'cat /etc/quagga/ospf6d.conf' - + cfg += add_comment 'QUAGGA CONF' cfg += cmd 'cat /etc/quagga/Quagga.conf' - + cfg += add_comment 'MOTD' cfg += cmd 'cat /etc/motd' - + cfg += add_comment 'PASSWD' cfg += cmd 'cat /etc/passwd' - + cfg += add_comment 'SWITCHD' cfg += cmd 'cat /etc/cumulus/switchd.conf' - + cfg += add_comment 'PORTS' cfg += cmd 'cat /etc/cumulus/ports.conf' - + cfg += add_comment 'TRAFFIC' cfg += cmd 'cat /etc/cumulus/datapath/traffic.conf' - + cfg += add_comment 'ACL' cfg += cmd 'iptables -L -n' - + cfg += add_comment 'VERSION' cfg += cmd 'cat /etc/cumulus/etc.replace/os-release' - + cfg += add_comment 'License' cfg += cmd 'cl-license' - end - cfg :telnet do username /^Username:/ @@ -89,6 +85,4 @@ class Cumulus < Oxidized::Model cfg :telnet, :ssh do pre_logout 'exit' end - - end diff --git a/lib/oxidized/model/datacom.rb b/lib/oxidized/model/datacom.rb index 5dbc080..5d5d220 100644 --- a/lib/oxidized/model/datacom.rb +++ b/lib/oxidized/model/datacom.rb @@ -1,5 +1,4 @@ class DataCom < Oxidized::Model - comment '! ' expect /^--More--\s+$/ do |data, re| @@ -34,5 +33,4 @@ class DataCom < Oxidized::Model password /^Password:\s$/ pre_logout 'exit' end - end diff --git a/lib/oxidized/model/dcnos.rb b/lib/oxidized/model/dcnos.rb new file mode 100644 index 0000000..59e6744 --- /dev/null +++ b/lib/oxidized/model/dcnos.rb @@ -0,0 +1,46 @@ +# DCNOS is a ZebOS derivative by DCN (http://www.dcnglobal.com/) +# In addition to products by DCN (now Yunke China), this OS type +# powers a number of re-branded OEM devices. + +# Developed against SNR S2950-24G 7.0.3.5 + +class DCNOS < Oxidized::Model + comment '! ' + + cmd :all do |cfg| + cfg.each_line.to_a[1..-1].join + end + + cmd 'show version' do |cfg| + cfg.gsub! /\s(Uptime is).*/, '' + comment cfg + end + + cmd 'show boot-files' do |cfg| + comment cfg + end + + cmd 'show flash' do |cfg| + comment cfg + end + + cmd 'show running-config' do |cfg| + cfg + end + + cfg :telnet do + username /^login:/i + password /^password:/i + end + + cfg :telnet, :ssh do + if vars :enable + post_login do + send "enable\n" + cmd vars(:enable) + end + end + post_login 'terminal length 0' + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/dlink.rb b/lib/oxidized/model/dlink.rb index 0d08793..6c604fb 100644 --- a/lib/oxidized/model/dlink.rb +++ b/lib/oxidized/model/dlink.rb @@ -11,7 +11,7 @@ class Dlink < Oxidized::Model end cmd :all do |cfg| - cfg.each_line.to_a[2..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[2..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'show switch' do |cfg| diff --git a/lib/oxidized/model/dnos.rb b/lib/oxidized/model/dnos.rb index 5c3cd53..d8b1d96 100644 --- a/lib/oxidized/model/dnos.rb +++ b/lib/oxidized/model/dnos.rb @@ -1,15 +1,15 @@ -class DNOS < Oxidized::Model - +class DNOS < Oxidized::Model # Force10 DNOS model # comment '! ' cmd :all do |cfg| cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, '' + cfg.gsub! /^Dell Networking OS uptime is\s.+/, '' # Omit constantly changing uptime info cfg.each_line.to_a[2..-2].join end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>' cfg @@ -27,10 +27,6 @@ class DNOS < Oxidized::Model comment cfg end - cmd 'show system' do |cfg| - comment cfg - end - cmd 'show running-config' do |cfg| cfg = cfg.each_line.to_a[3..-1].join cfg @@ -51,7 +47,6 @@ class DNOS < Oxidized::Model post_login 'terminal length 0' post_login 'terminal width 0' pre_logout 'exit' - pre_logout 'exit' + pre_logout 'exit' end - end diff --git a/lib/oxidized/model/edgecos.rb b/lib/oxidized/model/edgecos.rb index bc205f5..3668769 100644 --- a/lib/oxidized/model/edgecos.rb +++ b/lib/oxidized/model/edgecos.rb @@ -1,6 +1,5 @@ class EdgeCOS < Oxidized::Model - - comment '! ' + comment '! ' cmd :secret do |cfg| cfg.gsub!(/password \d+ (\S+).*/, '<secret removed>') @@ -9,7 +8,7 @@ class EdgeCOS < Oxidized::Model end cmd :all do |cfg| - cfg.each_line.to_a[2..-2].join + cfg.each_line.to_a[2..-2].join end cmd 'show running-config' @@ -43,5 +42,4 @@ class EdgeCOS < Oxidized::Model post_login 'terminal length 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/edgeos.rb b/lib/oxidized/model/edgeos.rb index aa7a197..a723904 100644 --- a/lib/oxidized/model/edgeos.rb +++ b/lib/oxidized/model/edgeos.rb @@ -1,5 +1,4 @@ class Edgeos < Oxidized::Model - # EdgeOS # prompt /\@.*?\:~\$\s/ @@ -27,5 +26,4 @@ class Edgeos < Oxidized::Model cfg :telnet, :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/edgeswitch.rb b/lib/oxidized/model/edgeswitch.rb index 7f5b1ea..36c0f9f 100644 --- a/lib/oxidized/model/edgeswitch.rb +++ b/lib/oxidized/model/edgeswitch.rb @@ -1,6 +1,5 @@ class EdgeSwitch < Oxidized::Model - -# Ubiquiti EdgeSwitch # + # Ubiquiti EdgeSwitch # comment '!' @@ -28,5 +27,4 @@ class EdgeSwitch < Oxidized::Model pre_logout 'quit' pre_logout 'n' end - end diff --git a/lib/oxidized/model/enterasys.rb b/lib/oxidized/model/enterasys.rb index 708d380..40f676d 100644 --- a/lib/oxidized/model/enterasys.rb +++ b/lib/oxidized/model/enterasys.rb @@ -1,5 +1,4 @@ class Enterasys < Oxidized::Model - # Enterasys B3/C3 models # prompt /^.+\w\(su\)->\s?$/ @@ -7,7 +6,7 @@ class Enterasys < Oxidized::Model comment '!' cmd :all do |cfg| - cfg.each_line.to_a[2..-3].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[2..-3].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'show system hardware' do |cfg| @@ -26,5 +25,4 @@ class Enterasys < Oxidized::Model cfg :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/eos.rb b/lib/oxidized/model/eos.rb index a9f3ff3..f29910c 100644 --- a/lib/oxidized/model/eos.rb +++ b/lib/oxidized/model/eos.rb @@ -1,5 +1,4 @@ class EOS < Oxidized::Model - # Arista EOS model # prompt /^.+[#>]\s?$/ @@ -7,15 +6,15 @@ class EOS < Oxidized::Model comment '! ' cmd :all do |cfg| - cfg.each_line.to_a[1..-2].join + cfg.each_line.to_a[1..-2].join end cmd :secret do |cfg| - cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' - cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>' - cfg.gsub! /^(enable secret).*/, '\\1 <configuration removed>' - cfg.gsub! /^(tacacs-server key \d+).*/, '\\1 <configuration removed>' - cfg + cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' + cfg.gsub! /username (\S+) privilege (\d+) (\S+).*/, '<secret hidden>' + cfg.gsub! /^(enable secret).*/, '\\1 <configuration removed>' + cfg.gsub! /^(tacacs-server key \d+).*/, '\\1 <configuration removed>' + cfg end cmd 'show inventory | no-more' do |cfg| @@ -41,5 +40,4 @@ class EOS < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/fabricos.rb b/lib/oxidized/model/fabricos.rb index e6d921e..b150c51 100644 --- a/lib/oxidized/model/fabricos.rb +++ b/lib/oxidized/model/fabricos.rb @@ -1,22 +1,20 @@ class FabricOS < Oxidized::Model - # Brocade Fabric OS model # ## FIXME: Only ssh exec mode support, no telnet, no ssh screenscraping prompt /^([\w]+:+[\w]+[>]\s)$/ - comment '# ' + comment '# ' cmd 'chassisShow' do |cfg| 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 end cmd 'configShow -all' do |cfg| - cfg = cfg.each_line.reject { |line| line.match /date = /}.join + cfg = cfg.each_line.reject { |line| line.match /date = / }.join cfg end cfg :ssh do - exec true # don't run shell, run each command in exec channel + exec true # don't run shell, run each command in exec channel end - end diff --git a/lib/oxidized/model/firewareos.rb b/lib/oxidized/model/firewareos.rb index 1b3d07c..bd0008d 100644 --- a/lib/oxidized/model/firewareos.rb +++ b/lib/oxidized/model/firewareos.rb @@ -1,5 +1,4 @@ class FirewareOS < Oxidized::Model - prompt /^\[?\w*\]?\w*?(<\w*>)?(#|>)\s*$/ comment '-- ' @@ -15,7 +14,7 @@ class FirewareOS < Oxidized::Model cmd 'show sysinfo' do |cfg| # avoid commits due to uptime - cfg = cfg.each_line.select { |line| not line.match /(.*time.*)|(.*memory.*)|(.*cpu.*)/ } + cfg = cfg.each_line.reject { |line| line.match /(.*time.*)|(.*memory.*)|(.*cpu.*)/ } cfg = cfg.join comment cfg end @@ -25,6 +24,4 @@ class FirewareOS < Oxidized::Model cfg :ssh do pre_logout 'exit' end - end - diff --git a/lib/oxidized/model/ftos.rb b/lib/oxidized/model/ftos.rb index 1c3b8b4..3ef4de6 100644 --- a/lib/oxidized/model/ftos.rb +++ b/lib/oxidized/model/ftos.rb @@ -1,5 +1,4 @@ -class FTOS < Oxidized::Model - +class FTOS < Oxidized::Model # Force10 FTOS model # comment '! ' @@ -8,7 +7,7 @@ class FTOS < Oxidized::Model cfg.each_line.to_a[2..-2].join end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>' cfg @@ -45,5 +44,4 @@ class FTOS < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/fujitsupy.rb b/lib/oxidized/model/fujitsupy.rb index 20a78dd..a2db909 100644 --- a/lib/oxidized/model/fujitsupy.rb +++ b/lib/oxidized/model/fujitsupy.rb @@ -1,5 +1,4 @@ class FujitsuPY < Oxidized::Model - prompt /^(\([\w.-]*\)\s#|^\S+\#\s)$/ comment '! ' @@ -7,13 +6,13 @@ class FujitsuPY < Oxidized::Model cfg.each_line.to_a[1..-2].join end -# 1Gbe switch + # 1Gbe switch cmd 'show version' do |cfg| cfg.gsub! /^(<ERROR> : 2 : format error)$/, '' comment cfg end -# 10Gbe switch + # 10Gbe switch cmd 'show system information' do |cfg| cfg.gsub! /^Current-time : [\w\s:]*$/, '' cfg.gsub! /^(\s{33}\^)$/, '' @@ -38,5 +37,4 @@ class FujitsuPY < Oxidized::Model send "n\n" end end - end diff --git a/lib/oxidized/model/gaiaos.rb b/lib/oxidized/model/gaiaos.rb index 434e774..8f13bcb 100644 --- a/lib/oxidized/model/gaiaos.rb +++ b/lib/oxidized/model/gaiaos.rb @@ -1,25 +1,23 @@ class GaiaOS < Oxidized::Model - # CheckPoint - Gaia OS Model - + # Gaia Prompt prompt /^([\[\]\w.@:-]+[#>]\s?)$/ # Comment tag comment '# ' - cmd :all do |cfg| cfg = cfg.each_line.to_a[1..-2].join end cmd :secret do |cfg| cfg.gsub! /^(set expert-password-hash ).*/, '\1<EXPERT PASSWORD REMOVED>' - cfg.gsub! /^(set user \S+ password-hash ).*/,'\1<USER PASSWORD REMOVED>' - cfg.gsub! /^(set ospf .* secret ).*/,'\1<OSPF KEY REMOVED>' - cfg.gsub! /^(set snmp community )(.*)( read-only.*)/,'\1<SNMP COMMUNITY REMOVED>\3' - cfg.gsub! /^(add snmp .* community )(.*)(\S?.*)/,'\1<SNMP COMMUNITY REMOVED>\3' - cfg.gsub! /(auth|privacy)(-pass-phrase-hashed )(\S*)/,'\1-pass-phrase-hashed <SNMP PASS-PHRASE REMOVED>' + cfg.gsub! /^(set user \S+ password-hash ).*/, '\1<USER PASSWORD REMOVED>' + cfg.gsub! /^(set ospf .* secret ).*/, '\1<OSPF KEY REMOVED>' + cfg.gsub! /^(set snmp community )(.*)( read-only.*)/, '\1<SNMP COMMUNITY REMOVED>\3' + cfg.gsub! /^(add snmp .* community )(.*)(\S?.*)/, '\1<SNMP COMMUNITY REMOVED>\3' + cfg.gsub! /(auth|privacy)(-pass-phrase-hashed )(\S*)/, '\1-pass-phrase-hashed <SNMP PASS-PHRASE REMOVED>' cfg end @@ -36,11 +34,9 @@ class GaiaOS < Oxidized::Model cfg end - cfg :ssh do # User shell must be /etc/cli.sh post_login 'set clienv rows 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/gcombnps.rb b/lib/oxidized/model/gcombnps.rb index 4a97162..e92c7ba 100644 --- a/lib/oxidized/model/gcombnps.rb +++ b/lib/oxidized/model/gcombnps.rb @@ -6,18 +6,18 @@ class GcomBNPS < Oxidized::Model # - S5330 (aka Fiberstore S3800) prompt /^\r?([\w.@()-]+?(\(1-16 chars\))?[#>:]\s?)$/ # also match SSH password promt (post_login commands are sent after the first prompt) - comment '! ' + comment '! ' -# alternative to handle the SSH login, but this breaks telnet -# expect /^Password\(1-16 chars\):/ do |data| -# send @node.auth[:password] + "\n" -# '' -# end + # alternative to handle the SSH login, but this breaks telnet + # expect /^Password\(1-16 chars\):/ do |data| + # send @node.auth[:password] + "\n" + # '' + # end # handle pager (can't be disabled?) expect /^\.\.\.\.press ENTER to next line, CTRL_C to quit, other key to next page\.\.\.\.$/ do |data, re| - send ' ' - data.sub re, '' + send ' ' + data.sub re, '' end cmd :all do |cfg| @@ -48,7 +48,6 @@ class GcomBNPS < Oxidized::Model comment out.join end - cmd 'show version' do |cfg| comment cfg end @@ -80,6 +79,4 @@ class GcomBNPS < Oxidized::Model cfg :telnet, :ssh do pre_logout 'exit' end - end - diff --git a/lib/oxidized/model/hatteras.rb b/lib/oxidized/model/hatteras.rb index 4192cbc..7341cc4 100644 --- a/lib/oxidized/model/hatteras.rb +++ b/lib/oxidized/model/hatteras.rb @@ -9,7 +9,6 @@ class Hatteras < Oxidized::Model data.sub re, '' end - cmd :secret do |cfg| cfg.gsub! /^(community) \S+/, '\\1 "<configuration removed>"' cfg.gsub! /^(communityString) "\S+"/, '\\1 "<configuration removed>"' @@ -22,14 +21,18 @@ class Hatteras < Oxidized::Model end cmd "show switch\r" do |cfg| - cfg = cfg.each_line.reject { |line| line.match /Switch uptime|Switch temperature|Last reset reason/ or - line.match /TermCpuUtil|^\s+\^$|ERROR: Bad command/ }.join + cfg = cfg.each_line.reject { |line| + line.match /Switch uptime|Switch temperature|Last reset reason/ or + line.match /TermCpuUtil|^\s+\^$|ERROR: Bad command/ + } .join comment cfg end cmd "show card\r" do |cfg| - cfg = cfg.each_line.reject { |line| line.match /Card uptime|Card temperature|Last reset reason/ or - line.match /TermCpuUtil|^\s+\^$|ERROR: Bad command/ }.join + cfg = cfg.each_line.reject { |line| + line.match /Card uptime|Card temperature|Last reset reason/ or + line.match /TermCpuUtil|^\s+\^$|ERROR: Bad command/ + } .join comment cfg end diff --git a/lib/oxidized/model/hirschmann.rb b/lib/oxidized/model/hirschmann.rb index 82432d7..858b198 100644 --- a/lib/oxidized/model/hirschmann.rb +++ b/lib/oxidized/model/hirschmann.rb @@ -1,10 +1,9 @@ class Hirschmann < Oxidized::Model + prompt /^[\(\w\s\w\)]+\s[>|#]+?$/ - prompt /^[\(\w\s\w\)]+\s[>|#]+?$/ - comment '## ' - - #Handle pager + + # Handle pager expect /^--More--.*$/ do |data, re| send 'a' data.sub re, '' @@ -22,11 +21,11 @@ class Hirschmann < Oxidized::Model cfg.gsub! /^Average CPU Utilization.*\n/, "" comment cfg end - + cmd 'show running-config' do |cfg| - cfg.gsub! /^users.*\n/, "" + cfg.gsub! /^users.*\n/, "" cfg - end + end cfg :telnet do username /^User:/ @@ -34,8 +33,7 @@ class Hirschmann < Oxidized::Model end cfg :telnet, :ssh do - post_login 'enable' - pre_logout 'logout' + post_login 'enable' + pre_logout 'logout' end - end diff --git a/lib/oxidized/model/hpebladesystem.rb b/lib/oxidized/model/hpebladesystem.rb index 27673de..75d2dbf 100644 --- a/lib/oxidized/model/hpebladesystem.rb +++ b/lib/oxidized/model/hpebladesystem.rb @@ -4,13 +4,13 @@ class HPEBladeSystem < Oxidized::Model prompt /.*> / comment '# ' - #expect /^\s*--More--\s+.*$/ do |data, re| + # expect /^\s*--More--\s+.*$/ do |data, re| # send ' ' # data.sub re, '' - #end + # end cmd :all do |cfg| - cfg = cfg.delete("\r").each_line.to_a[0..-1].map{|line|line.rstrip}.join("\n") + "\n" + cfg = cfg.delete("\r").each_line.to_a[0..-1].map { |line| line.rstrip }.join("\n") + "\n" cfg.each_line.to_a[0..-2].join end @@ -22,7 +22,7 @@ class HPEBladeSystem < Oxidized::Model cmd 'show oa info' do |cfg| comment cfg end - + cmd 'show oa network' do |cfg| comment cfg end @@ -30,15 +30,15 @@ class HPEBladeSystem < Oxidized::Model cmd 'show oa certificate' do |cfg| comment cfg end - + cmd 'show sshfingerprint' do |cfg| comment cfg end - + cmd 'show fru' do |cfg| comment cfg end - + cmd 'show network' do |cfg| cfg.gsub! /Last Update:.*$/i, '' comment cfg @@ -55,15 +55,15 @@ class HPEBladeSystem < Oxidized::Model cmd 'show server list' do |cfg| comment cfg end - + cmd 'show server names' do |cfg| comment cfg end - + cmd 'show server port map all' do |cfg| comment cfg end - + cmd 'show server info all' do |cfg| comment cfg end @@ -72,14 +72,14 @@ class HPEBladeSystem < Oxidized::Model cfg.gsub! /^#(Generated on:) .*$/, '\\1 <removed>' cfg.gsub /^\s+/, '' end - + cfg :telnet do username /\slogin:/ password /^Password: / end - - cfg :telnet, :ssh do - post_login "set script mode on" - pre_logout "exit" - end + + cfg :telnet, :ssh do + post_login "set script mode on" + pre_logout "exit" + end end diff --git a/lib/oxidized/model/hpemsa.rb b/lib/oxidized/model/hpemsa.rb index 4fe636f..68485a1 100644 --- a/lib/oxidized/model/hpemsa.rb +++ b/lib/oxidized/model/hpemsa.rb @@ -1,5 +1,4 @@ class HpeMsa < Oxidized::Model - prompt /^#\s?$/ cmd 'show configuration' @@ -8,6 +7,4 @@ class HpeMsa < Oxidized::Model post_login 'set cli-parameters pager disabled' pre_logout 'exit' end - end - diff --git a/lib/oxidized/model/ios.rb b/lib/oxidized/model/ios.rb index 4e7d223..8069f83 100644 --- a/lib/oxidized/model/ios.rb +++ b/lib/oxidized/model/ios.rb @@ -1,24 +1,23 @@ class IOS < Oxidized::Model - prompt /^([\w.@()-]+[#>]\s?)$/ comment '! ' # example how to handle pager - #expect /^\s--More--\s+.*$/ do |data, re| + # expect /^\s--More--\s+.*$/ do |data, re| # send ' ' # data.sub re, '' - #end + # end # non-preferred way to handle additional PW prompt - #expect /^[\w.]+>$/ do |data| + # expect /^[\w.]+>$/ do |data| # send "enable\n" # send vars(:enable) + "\n" # data - #end + # end cmd :all do |cfg| - #cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager - #cfg.gsub! /\cH+/, '' # example how to handle pager + # cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager + # cfg.gsub! /\cH+/, '' # example how to handle pager # get rid of errors for commands that don't work on some devices cfg.gsub! /^% Invalid input detected at '\^' marker\.$|^\s+\^$/, '' cfg.each_line.to_a[1..-2].join @@ -43,64 +42,64 @@ class IOS < Oxidized::Model comments = [] comments << cfg.lines.first lines = cfg.lines - lines.each_with_index do |line,i| - slave = '' - slaveslot = '' + lines.each_with_index do |line, i| + slave = '' + slaveslot = '' - if line.match /^Slave in slot (\d+) is running/ - slave = " Slave:"; - slaveslot = ", slot #{$1}"; - end + if line.match /^Slave in slot (\d+) is running/ + slave = " Slave:"; + slaveslot = ", slot #{$1}"; + end - if line.match /^Compiled (.*)$/ - comments << "Image:#{slave} Compiled: #{$1}" - end + if line.match /^Compiled (.*)$/ + comments << "Image:#{slave} Compiled: #{$1}" + end - if line.match /^(?:Cisco )?IOS .* Software,? \(([A-Za-z0-9_-]*)\), .*Version\s+(.*)$/ - comments << "Image:#{slave} Software: #{$1}, #{$2}" - end + if line.match /^(?:Cisco )?IOS .* Software,? \(([A-Za-z0-9_-]*)\), .*Version\s+(.*)$/ + comments << "Image:#{slave} Software: #{$1}, #{$2}" + end - if line.match /^ROM: (IOS \S+ )?(System )?Bootstrap.*(Version.*)$/ - comments << "ROM Bootstrap: #{$3}" - end + if line.match /^ROM: (IOS \S+ )?(System )?Bootstrap.*(Version.*)$/ + comments << "ROM Bootstrap: #{$3}" + end - if line.match /^BOOTFLASH: .*(Version.*)$/ - comments << "BOOTFLASH: #{$1}" - end + if line.match /^BOOTFLASH: .*(Version.*)$/ + comments << "BOOTFLASH: #{$1}" + end - if line.match /^(\d+[kK]) bytes of (non-volatile|NVRAM)/ - comments << "Memory: nvram #{$1}" - end + if line.match /^(\d+[kK]) bytes of (non-volatile|NVRAM)/ + comments << "Memory: nvram #{$1}" + end - if line.match /^(\d+[kK]) bytes of (flash memory|flash internal|processor board System flash|ATA CompactFlash)/i - comments << "Memory: flash #{$1}" - end + if line.match /^(\d+[kK]) bytes of (flash memory|flash internal|processor board System flash|ATA CompactFlash)/i + comments << "Memory: flash #{$1}" + end - if line.match (/^(\d+[kK]) bytes of (Flash|ATA)?.*PCMCIA .*(slot|disk) ?(\d)/i) - comments << "Memory: pcmcia #{$2} #{$3}#{$4} #{$1}"; - end + if line.match (/^(\d+[kK]) bytes of (Flash|ATA)?.*PCMCIA .*(slot|disk) ?(\d)/i) + comments << "Memory: pcmcia #{$2} #{$3}#{$4} #{$1}"; + end - if line.match /(\S+(?:\sseries)?)\s+(?:\((\S+)\)\s+processor|\(revision[^)]+\)).*\s+with (\S+k) bytes/i - sproc = $1 - cpu = $2 - mem = $3 - cpuxtra = '' - comments << "Chassis type:#{slave} #{sproc}"; - comments << "Memory:#{slave} main #{mem}"; - # check the next two lines for more CPU info - if cfg.lines[i+1].match /processor board id (\S+)/i - comments << "Processor ID: #{$1}"; - end - if cfg.lines[i+2].match /(cpu at |processor: |#{cpu} processor,)/i - # change implementation to impl and prepend comma - cpuxtra = cfg.lines[i+2].gsub(/implementation/,'impl').gsub(/^/,', ').chomp; - end - comments << "CPU:#{slave} #{cpu}#{cpuxtra}#{slaveslot}"; + if line.match /(\S+(?:\sseries)?)\s+(?:\((\S+)\)\s+processor|\(revision[^)]+\)).*\s+with (\S+k) bytes/i + sproc = $1 + cpu = $2 + mem = $3 + cpuxtra = '' + comments << "Chassis type:#{slave} #{sproc}"; + comments << "Memory:#{slave} main #{mem}"; + # check the next two lines for more CPU info + if cfg.lines[i + 1].match /processor board id (\S+)/i + comments << "Processor ID: #{$1}"; end - - if line.match /^System image file is "([^\"]*)"$/ - comments << "Image: #{$1}" + if cfg.lines[i + 2].match /(cpu at |processor: |#{cpu} processor,)/i + # change implementation to impl and prepend comma + cpuxtra = cfg.lines[i + 2].gsub(/implementation/, 'impl').gsub(/^/, ', ').chomp; end + comments << "CPU:#{slave} #{cpu}#{cpuxtra}#{slaveslot}"; + end + + if line.match /^System image file is "([^\"]*)"$/ + comments << "Image: #{$1}" + end end comments << "\n" comment comments.join "\n" @@ -143,5 +142,4 @@ class IOS < Oxidized::Model post_login 'terminal width 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/iosxe.rb b/lib/oxidized/model/iosxe.rb new file mode 100644 index 0000000..1945e11 --- /dev/null +++ b/lib/oxidized/model/iosxe.rb @@ -0,0 +1,5 @@ +# IOS parser should work here + +require_relative 'ios.rb' + +IOSXE = IOS diff --git a/lib/oxidized/model/iosxr.rb b/lib/oxidized/model/iosxr.rb index ac2f798..1635e57 100644 --- a/lib/oxidized/model/iosxr.rb +++ b/lib/oxidized/model/iosxr.rb @@ -1,5 +1,4 @@ class IOSXR < Oxidized::Model - # IOS XR model # prompt /^(\r?[\w.@:\/-]+[#>]\s?)$/ @@ -9,7 +8,7 @@ class IOSXR < Oxidized::Model cfg.each_line.to_a[2..-2].join end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' cfg.gsub! /secret (\d+) (\S+).*/, '<secret hidden>' cfg @@ -45,5 +44,4 @@ class IOSXR < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/ipos.rb b/lib/oxidized/model/ipos.rb index 938f12d..753c6b1 100644 --- a/lib/oxidized/model/ipos.rb +++ b/lib/oxidized/model/ipos.rb @@ -1,5 +1,4 @@ class IPOS < Oxidized::Model - # Ericsson SSR (IPOS) # Redback SE (SEOS) @@ -54,7 +53,7 @@ class IPOS < Oxidized::Model post_login 'terminal length 0' if vars :enable post_login do - cmd "enable" + cmd "enable" cmd vars(:enable) end end @@ -63,5 +62,4 @@ class IPOS < Oxidized::Model send "n\n" end end - end diff --git a/lib/oxidized/model/ironware.rb b/lib/oxidized/model/ironware.rb index 386d585..32dbf47 100644 --- a/lib/oxidized/model/ironware.rb +++ b/lib/oxidized/model/ironware.rb @@ -1,19 +1,17 @@ class IronWare < Oxidized::Model - prompt /^.*(telnet|ssh)\@.+[>#]\s?$/i comment '! ' - #to handle pager without enable - #expect /^((.*)--More--(.*))$/ do |data, re| + # to handle pager without enable + # expect /^((.*)--More--(.*))$/ do |data, re| # send ' ' # data.sub re, '' - #end - + # end - #to remove backspace (if handle pager without enable) - #expect /^((.*)[\b](.*))$/ do |data, re| + # to remove backspace (if handle pager without enable) + # expect /^((.*)[\b](.*))$/ do |data, re| # data.sub re, '' - #end + # end cmd :all do |cfg| # sometimes ironware inserts arbitrary whitespace after commands are @@ -22,17 +20,17 @@ class IronWare < Oxidized::Model end cmd 'show version' do |cfg| - cfg.gsub! /(^((.*)[Ss]ystem uptime(.*))$)/, '' #remove unwanted line system uptime + cfg.gsub! /(^((.*)[Ss]ystem uptime(.*))$)/, '' # remove unwanted line system uptime cfg.gsub! /(^((.*)[Tt]he system started at(.*))$)/, '' - cfg.gsub! /[Uu]p\s?[Tt]ime is .*/,'' + cfg.gsub! /[Uu]p\s?[Tt]ime is .*/, '' comment cfg end cmd 'show chassis' do |cfg| - cfg.encode!("UTF-8", :invalid => :replace, :undef => :replace) #sometimes ironware returns broken encoding - cfg.gsub! /(^((.*)Current temp(.*))$)/, '' #remove unwanted lines current temperature - cfg.gsub! /Speed = [A-Z-]{2,6} \(\d{2,3}\%\)/, '' #remove unwanted lines Speed Fans + cfg.encode!("UTF-8", :invalid => :replace, :undef => :replace) # sometimes ironware returns broken encoding + cfg.gsub! /(^((.*)Current temp(.*))$)/, '' # remove unwanted lines current temperature + cfg.gsub! /Speed = [A-Z-]{2,6} \(\d{2,3}\%\)/, '' # remove unwanted lines Speed Fans cfg.gsub! /current speed is [A-Z]{2,6} \(\d{2,3}\%\)/, '' cfg.gsub! /Fan \d* - STATUS: OK \D*\d*./, '' # Fix for ADX Fan speed reporting cfg.gsub! /\d* deg C/, '' # Fix for ADX temperature reporting @@ -73,7 +71,7 @@ class IronWare < Oxidized::Model password /^(Please Enter Password ?|Password):/ end - #handle pager with enable + # handle pager with enable cfg :telnet, :ssh do if vars :enable post_login do @@ -86,5 +84,4 @@ class IronWare < Oxidized::Model post_login 'terminal length 0' pre_logout "logout\nexit\nexit\n" end - end diff --git a/lib/oxidized/model/isam.rb b/lib/oxidized/model/isam.rb index 1709500..8b8b5d5 100644 --- a/lib/oxidized/model/isam.rb +++ b/lib/oxidized/model/isam.rb @@ -1,6 +1,6 @@ class ISAM < Oxidized::Model - #Alcatel ISAM 7302/7330 FTTN - + # Alcatel ISAM 7302/7330 FTTN + prompt /^([\w.:@-]+>#\s)$/ comment '# ' @@ -8,7 +8,7 @@ class ISAM < Oxidized::Model cfg.each_line.to_a[1..-2].join end - cfg :telnet do + cfg :telnet do username /^login:\s*/ password /^password:\s*/ end @@ -19,7 +19,7 @@ class ISAM < Oxidized::Model post_login 'environment inhibit-alarms print no-more' pre_logout 'logout' end - + cmd 'show software-mngt oswp detail' do |cfg| comment cfg end @@ -31,5 +31,4 @@ class ISAM < Oxidized::Model cmd 'info configure flat' do |cfg| cfg end - end diff --git a/lib/oxidized/model/junos.rb b/lib/oxidized/model/junos.rb index 2ea0179..737a000 100644 --- a/lib/oxidized/model/junos.rb +++ b/lib/oxidized/model/junos.rb @@ -1,6 +1,5 @@ class JunOS < Oxidized::Model - - comment '# ' + comment '# ' def telnet @input.class.to_s.match(/Telnet/) @@ -8,7 +7,7 @@ class JunOS < Oxidized::Model cmd :all do |cfg| cfg = cfg.lines.to_a[1..-2].join if screenscrape - cfg.gsub!(/ scale-subscriber (\s+)(\d+)/,' scale-subscriber <count>') + cfg.gsub!(/ scale-subscriber (\s+)(\d+)/, ' scale-subscriber <count>') cfg.lines.map { |line| line.rstrip }.join("\n") + "\n" end @@ -32,7 +31,7 @@ class JunOS < Oxidized::Model out = '' case @model when 'mx960' - out << cmd('show chassis fabric reachability') { |cfg| comment cfg } + out << cmd('show chassis fabric reachability') { |cfg| comment cfg } when /^(ex22|ex33|ex4|ex8|qfx)/ out << cmd('show virtual-chassis') { |cfg| comment cfg } end @@ -49,7 +48,7 @@ class JunOS < Oxidized::Model end cfg :ssh do - exec true # don't run shell, run each command in exec channel + exec true # don't run shell, run each command in exec channel end cfg :telnet, :ssh do @@ -57,5 +56,4 @@ class JunOS < Oxidized::Model post_login 'set cli screen-width 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/masteros.rb b/lib/oxidized/model/masteros.rb index 587fdc4..c03beb1 100644 --- a/lib/oxidized/model/masteros.rb +++ b/lib/oxidized/model/masteros.rb @@ -1,8 +1,7 @@ class MasterOS < Oxidized::Model - # MRV MasterOS model # -comment '!' + comment '!' cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' @@ -43,5 +42,4 @@ comment '!' end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/mlnxos.rb b/lib/oxidized/model/mlnxos.rb index 49f3369..990417d 100644 --- a/lib/oxidized/model/mlnxos.rb +++ b/lib/oxidized/model/mlnxos.rb @@ -1,8 +1,7 @@ class MLNXOS < Oxidized::Model - prompt /([\w.@()-\[:\s\]]+[#>]\s)$/ - comment '## ' - + comment '## ' + # Pager Handling expect /.+lines\s\d+\-\d+([\s]|\/\d+\s\(END\)\s).+$/ do |data, re| send ' ' @@ -11,7 +10,7 @@ class MLNXOS < Oxidized::Model cmd :all do |cfg| cfg.gsub! /\[\?1h=\r/, '' # Pager Handling - cfg.gsub! /\r\[K/,'' # Pager Handling + cfg.gsub! /\r\[K/, '' # Pager Handling cfg.gsub! /\s/, '' # Linebreak Handling cfg.gsub! /^CPU\ load\ averages\:\s.+/, '' # Omit constantly changing CPU info cfg.gsub! /^System\ memory\:\s.+/, '' # Omit constantly changing memory info diff --git a/lib/oxidized/model/model.rb b/lib/oxidized/model/model.rb index a2a71cb..438357f 100644 --- a/lib/oxidized/model/model.rb +++ b/lib/oxidized/model/model.rb @@ -7,29 +7,34 @@ module Oxidized class << self def inherited klass - klass.instance_variable_set '@cmd', Hash.new { |h,k| h[k] = [] } - klass.instance_variable_set '@cfg', Hash.new { |h,k| h[k] = [] } - klass.instance_variable_set '@procs', Hash.new { |h,k| h[k] = [] } + klass.instance_variable_set '@cmd', Hash.new { |h, k| h[k] = [] } + klass.instance_variable_set '@cfg', Hash.new { |h, k| h[k] = [] } + klass.instance_variable_set '@procs', Hash.new { |h, k| h[k] = [] } klass.instance_variable_set '@expect', [] klass.instance_variable_set '@comment', nil klass.instance_variable_set '@prompt', nil end - def comment _comment='# ' + + def comment _comment = '# ' return @comment if @comment @comment = block_given? ? yield : _comment end - def prompt _prompt=nil + + def prompt _prompt = nil @prompt or @prompt = _prompt end + def cfg *methods, &block [methods].flatten.each do |method| @cfg[method.to_s] << block end end + def cfgs @cfg end - def cmd _cmd=nil, &block + + def cmd _cmd = nil, &block if _cmd.class == Symbol @cmd[_cmd] << block else @@ -37,12 +42,15 @@ module Oxidized end Oxidized.logger.debug "lib/oxidized/model/model.rb Added #{_cmd} to the commands list" end + def cmds @cmd end + def expect re, &block @expect << [re, block] end + def expects @expect end @@ -83,6 +91,7 @@ module Oxidized Oxidized.logger.debug "lib/oxidized/model/model.rb Executing #{string}" out = @input.cmd(string) return false unless out + out = out.b unless Oxidized.config.input.utf8_encoded? self.class.cmds[:all].each do |all_block| out = instance_exec Oxidized::String.new(out), string, &all_block end @@ -166,6 +175,5 @@ module Oxidized output.set_cmd(name) output end - end end diff --git a/lib/oxidized/model/mtrlrfs.rb b/lib/oxidized/model/mtrlrfs.rb index 8baa4e9..31b4f22 100644 --- a/lib/oxidized/model/mtrlrfs.rb +++ b/lib/oxidized/model/mtrlrfs.rb @@ -1,5 +1,4 @@ class Mtrlrfs < Oxidized::Model - # Motorola RFS/Extreme WM comment '# ' @@ -7,7 +6,7 @@ class Mtrlrfs < Oxidized::Model cmd :all do |cfg| # xos inserts leading \r characters and other trailing white space. # this deletes extraneous \r and trailing white space. - cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[1..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'show version' do |cfg| @@ -32,6 +31,4 @@ class Mtrlrfs < Oxidized::Model send "n\n" end end - end - diff --git a/lib/oxidized/model/ndms.rb b/lib/oxidized/model/ndms.rb new file mode 100644 index 0000000..1947f91 --- /dev/null +++ b/lib/oxidized/model/ndms.rb @@ -0,0 +1,24 @@ +class NDMS < Oxidized::Model + # Pull config from Zyxel Keenetic devices from version NDMS >= 2.0 + + comment '! ' + + prompt /^([\w.@()-]+[#>]\s?)/m + + cmd 'show version' do |cfg| + cfg = cfg.each_line.to_a[1..-3].join + comment cfg + end + + cmd 'show running-config' do |cfg| + cfg = cfg.each_line.to_a[1..-2] + cfg = cfg.reject { |line| line.match /(clock date|checksum)/ }.join + cfg + end + + cfg :telnet do + username /^Login:/ + password /^Password:/ + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/netgear.rb b/lib/oxidized/model/netgear.rb index 0ab1349..40b0924 100644 --- a/lib/oxidized/model/netgear.rb +++ b/lib/oxidized/model/netgear.rb @@ -1,15 +1,15 @@ class Netgear < Oxidized::Model - comment '!' - prompt /^(\([\w\-.]+\)\s[#>])$/ + prompt /^(\([\w\s\-.]+\)\s[#>])$/ cmd :secret do |cfg| cfg.gsub!(/password (\S+)/, 'password <hidden>') + cfg.gsub!(/encrypted (\S+)/, 'encrypted <hidden>') cfg end cfg :telnet do - username /^User:/ + username /^(User:|Applying Interface configuration, please wait ...)/ end cfg :telnet, :ssh do @@ -36,5 +36,4 @@ class Netgear < Oxidized::Model cmd 'show running-config' do |cfg| cfg.gsub! /^(!.*Time).*$/, '\1' end - end diff --git a/lib/oxidized/model/netscaler.rb b/lib/oxidized/model/netscaler.rb index 9ca66b6..00d1b71 100644 --- a/lib/oxidized/model/netscaler.rb +++ b/lib/oxidized/model/netscaler.rb @@ -1,5 +1,4 @@ class NetScaler < Oxidized::Model - prompt /^\>\s*$/ comment '# ' @@ -20,5 +19,4 @@ class NetScaler < Oxidized::Model cfg :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/nos.rb b/lib/oxidized/model/nos.rb index ec7c818..4049aa5 100644 --- a/lib/oxidized/model/nos.rb +++ b/lib/oxidized/model/nos.rb @@ -1,5 +1,4 @@ class NOS < Oxidized::Model - # Brocade Network Operating System prompt /^(?:\e\[..h)?[\w.-]+# $/ @@ -38,8 +37,7 @@ class NOS < Oxidized::Model cfg :telnet, :ssh do post_login 'terminal length 0' - #post_login 'terminal width 0' + # post_login 'terminal width 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/nxos.rb b/lib/oxidized/model/nxos.rb index 60d6037..ec1f807 100644 --- a/lib/oxidized/model/nxos.rb +++ b/lib/oxidized/model/nxos.rb @@ -1,8 +1,12 @@ class NXOS < Oxidized::Model - prompt /^(\r?[\w.@_()-]+[#]\s?)$/ comment '! ' + def filter cfg + cfg.gsub! /\r\n?/, "\n" + cfg.gsub! prompt, '' + end + cmd :secret do |cfg| cfg.gsub! /^(snmp-server community).*/, '\\1 <configuration removed>' cfg.gsub! /^(snmp-server user (\S+) (\S+) auth (\S+)) (\S+) (priv) (\S+)/, '\\1 <configuration removed> ' @@ -10,18 +14,23 @@ class NXOS < Oxidized::Model cfg.gsub! /^(radius-server key).*/, '\\1 <secret hidden>' cfg end - + cmd 'show version' do |cfg| + cfg = filter cfg cfg = cfg.each_line.take_while { |line| not line.match(/uptime/i) } comment cfg.join "" end cmd 'show inventory' do |cfg| + cfg = filter cfg comment cfg - end + end cmd 'show running-config' do |cfg| + cfg = filter cfg + cfg.gsub! /^(show run.*)$/, '! \1' cfg.gsub! /^!Time:[^\n]*\n/, '' + cfg.gsub! /^[\w.@_()-]+[#].*$/, '' cfg end diff --git a/lib/oxidized/model/oneos.rb b/lib/oxidized/model/oneos.rb index eeaa2ce..35332c8 100644 --- a/lib/oxidized/model/oneos.rb +++ b/lib/oxidized/model/oneos.rb @@ -1,24 +1,23 @@ class OneOS < Oxidized::Model - prompt /^([\w.@()-]+#\s?)$/ comment '! ' # example how to handle pager - #expect /^\s--More--\s+.*$/ do |data, re| + # expect /^\s--More--\s+.*$/ do |data, re| # send ' ' # data.sub re, '' - #end + # end # non-preferred way to handle additional PW prompt - #expect /^[\w.]+>$/ do |data| + # expect /^[\w.]+>$/ do |data| # send "enable\n" # send vars(:enable) + "\n" # data - #end + # end cmd :all do |cfg| - #cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager - #cfg.gsub! /\cH+/, '' # example how to handle pager + # cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager + # cfg.gsub! /\cH+/, '' # example how to handle pager cfg.each_line.to_a[1..-2].join end @@ -54,5 +53,4 @@ class OneOS < Oxidized::Model post_login 'term len 0' pre_logout 'exit' end - end diff --git a/lib/oxidized/model/opengear.rb b/lib/oxidized/model/opengear.rb index b7c697f..1f94edb 100644 --- a/lib/oxidized/model/opengear.rb +++ b/lib/oxidized/model/opengear.rb @@ -1,8 +1,7 @@ class OpenGear < Oxidized::Model + comment '# ' - comment '# ' - - prompt /^(\$\s)?$/ + prompt /^(\$\s)$/ cmd :secret do |cfg| cfg.gsub!(/password (\S+)/, 'password <secret removed>') @@ -15,7 +14,6 @@ class OpenGear < Oxidized::Model cmd 'config -g config' cfg :ssh do - exec true # don't run shell, run each command in exec channel + exec true # don't run shell, run each command in exec channel end - end diff --git a/lib/oxidized/model/openwrt.rb b/lib/oxidized/model/openwrt.rb new file mode 100644 index 0000000..7ba9e98 --- /dev/null +++ b/lib/oxidized/model/openwrt.rb @@ -0,0 +1,77 @@ +class OpenWrt < Oxidized::Model + prompt /^[^#]+#/ + comment '#' + + cmd 'cat /etc/banner' do |cfg| + comment "#### Info: /etc/banner #####\n#{cfg}" + end + + cmd 'cat /proc/cpuinfo' do |cfg| + comment "#### Info: /proc/cpuinfo #####\n#{cfg}" + end + + cmd 'cat /etc/openwrt_release' do |cfg| + comment "#### Info: /etc/openwrt_release #####\n#{cfg}" + end + + cmd 'sysupgrade -l' do |cfg| + @sysupgradefiles = cfg + comment "#### Info: sysupgrade -l #####\n#{cfg}" + end + + cmd 'cat /proc/mtd' do |cfg| + @mtdpartitions = cfg + comment "#### Info: /proc/mtd #####\n#{cfg}" + end + + post do + cfg = [] + binary_files = vars(:openwrt_binary_files) || %w[/etc/dropbear/dropbear_rsa_host_key] + non_sensitive_files = vars(:openwrt_non_sensitive_files) || %w[rpcd uhttpd] + partitions_to_backup = vars(:openwrt_partitions_to_backup) || %w[art devinfo u_env config caldata] + @sysupgradefiles.lines.each do |sysupgradefile| + sysupgradefile = sysupgradefile.strip + if sysupgradefile.start_with?('/etc/config/') + unless sysupgradefile.end_with?('-opkg') + filename = sysupgradefile.split('/')[-1] + cfg << comment("#### File: #{sysupgradefile} #####") + uciexport = cmd("uci export #{filename}") + Oxidized.logger.debug "Exporting uci config - #{filename}" + if vars(:remove_secret) && !(non_sensitive_files.include? filename) + Oxidized.logger.debug "Scrubbing uci config - #{filename}" + uciexport.gsub!(/^(\s+option\s+(password|key)\s+')[^']+'/, '\\1<secret hidden>\'') + end + cfg << uciexport + end + elsif binary_files.include? sysupgradefile + Oxidized.logger.debug "Exporting binary file - #{sysupgradefile}" + cfg << comment("#### Binary file: #{sysupgradefile} #####") + cfg << comment("Decode using 'echo -en <data> | gzip -dc > #{sysupgradefile}'") + cfg << cmd("gzip -c #{sysupgradefile} | hexdump -ve '1/1 \"_x%.2x\"' | tr _ \\") + elsif vars(:remove_secret) && sysupgradefile == '/etc/shadow' + Oxidized.logger.debug 'Exporting and scrubbing /etc/shadow' + cfg << comment("#### File: #{sysupgradefile} #####") + shadow = cmd("cat #{sysupgradefile}") + shadow.gsub!(/^([^:]+:)[^:]*(:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:)/, '\\1\\2') + cfg << shadow + else + Oxidized.logger.debug "Exporting file - #{sysupgradefile}" + cfg << comment("#### File: #{sysupgradefile} #####") + cfg << cmd("cat #{sysupgradefile}") + end + end + @mtdpartitions.scan(/(\w+):\s+\w+\s+\w+\s+"(.*)"/).each do |partition, name| + next unless vars(:openwrt_backup_partitions) && partitions_to_backup.include?(name) + Oxidized.logger.debug "Exporting partition - #{name}(#{partition})" + cfg << comment("#### Partition: #{name} /dev/#{partition} #####") + cfg << comment("Decode using 'echo -en <data> | gzip -dc > #{name}'") + cfg << cmd("dd if=/dev/#{partition} 2>/dev/null | gzip -c | hexdump -ve '1/1 \"%.2x\"'") + end + cfg.join "\n" + end + + cfg :ssh do + exec true + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/opnsense.rb b/lib/oxidized/model/opnsense.rb index b874fca..a8f7a47 100644 --- a/lib/oxidized/model/opnsense.rb +++ b/lib/oxidized/model/opnsense.rb @@ -1,21 +1,19 @@ class OpnSense < Oxidized::Model - # minimum required permissions: "System: Shell account access" # must enable SSH and password-based SSH access - + cmd :all do |cfg| cfg.each_line.to_a[1..-1].join end - + cmd 'cat /conf/config.xml' do |cfg| cfg.gsub! /\s<revision>\s*<time>\d*<\/time>\s*.*\s*.*\s*<\/revision>/, '' cfg.gsub! /\s<last_rule_upd_time>\d*<\/last_rule_upd_time>/, '' cfg end - + cfg :ssh do exec true pre_logout 'exit' end - end diff --git a/lib/oxidized/model/outputs.rb b/lib/oxidized/model/outputs.rb index a668e9d..23a37f5 100644 --- a/lib/oxidized/model/outputs.rb +++ b/lib/oxidized/model/outputs.rb @@ -1,7 +1,6 @@ module Oxidized class Model class Outputs - def to_cfg type_to_str(nil) end @@ -23,7 +22,7 @@ module Oxidized end def type type - @outputs.select { |out| out.type==type } + @outputs.select { |out| out.type == type } end def types @@ -35,7 +34,6 @@ module Oxidized def initialize @outputs = [] end - end end end diff --git a/lib/oxidized/model/panos.rb b/lib/oxidized/model/panos.rb index 67ccaec..422a9fe 100644 --- a/lib/oxidized/model/panos.rb +++ b/lib/oxidized/model/panos.rb @@ -1,8 +1,7 @@ class PanOS < Oxidized::Model - # PaloAlto PAN-OS model # - comment '! ' + comment '! ' prompt /^[\w.\@:\(\)-]+>\s?$/ diff --git a/lib/oxidized/model/pfsense.rb b/lib/oxidized/model/pfsense.rb index 5849160..13a6370 100644 --- a/lib/oxidized/model/pfsense.rb +++ b/lib/oxidized/model/pfsense.rb @@ -1,20 +1,24 @@ class PfSense < Oxidized::Model - # use other use than 'admin' user, 'admin' user cannot get ssh/exec. See issue #535 - + cmd :all do |cfg| cfg.each_line.to_a[1..-1].join end - + + cmd :secret do |cfg| + cfg.gsub! /(\s+<bcrypt-hash>)[^<]+(<\/bcrypt-hash>)/, '\\1<secret hidden>\\2' + cfg.gsub! /(\s+<password>)[^<]+(<\/password>)/, '\\1<secret hidden>\\2' + cfg + end + cmd 'cat /cf/conf/config.xml' do |cfg| cfg.gsub! /\s<revision>\s*<time>\d*<\/time>\s*.*\s*.*\s*<\/revision>/, '' cfg.gsub! /\s<last_rule_upd_time>\d*<\/last_rule_upd_time>/, '' cfg end - + cfg :ssh do exec true pre_logout 'exit' end - end diff --git a/lib/oxidized/model/planet.rb b/lib/oxidized/model/planet.rb index 9ce9cf9..56e688c 100644 --- a/lib/oxidized/model/planet.rb +++ b/lib/oxidized/model/planet.rb @@ -1,24 +1,23 @@ class Planet < Oxidized::Model - prompt /^\r?([\w.@()-]+[#>]\s?)$/ comment '! ' # example how to handle pager - #expect /^\s--More--\s+.*$/ do |data, re| + # expect /^\s--More--\s+.*$/ do |data, re| # send ' ' # data.sub re, '' - #end + # end # non-preferred way to handle additional PW prompt - #expect /^[\w.]+>$/ do |data| + # expect /^[\w.]+>$/ do |data| # send "enable\n" # send vars(:enable) + "\n" # data - #end + # end cmd :all do |cfg| - #cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager - #cfg.gsub! /\cH+/, '' # example how to handle pager + # cfg.gsub! /\cH+\s{8}/, '' # example how to handle pager + # cfg.gsub! /\cH+/, '' # example how to handle pager cfg.each_line.to_a[1..-2].join end @@ -39,7 +38,7 @@ class Planet < Oxidized::Model cfg = cfg.each_line.to_a[0...-2] - # Strip system (up)time and temperature + # Strip system (up)time and temperature cfg = cfg.reject { |line| line.match /System Time\s*:.*/ } cfg = cfg.reject { |line| line.match /System Uptime\s*:.*/ } cfg = cfg.reject { |line| line.match /Temperature\s*:.*/ } @@ -47,13 +46,12 @@ class Planet < Oxidized::Model comment cfg.join end - cmd 'show running-config' do |cfg| cfg.gsub! "\n\r", "\n" cfg = cfg.each_line.to_a cfg = cfg.reject { |line| line.match "Building configuration..." } - + if @planetsgs cfg << cmd('show transceiver detail | include transceiver detail information|found|Type|length|Nominal|wavelength|Base information') do |cfg| comment cfg @@ -62,7 +60,6 @@ class Planet < Oxidized::Model cfg.join end - cfg :telnet do username /^Username:/ @@ -80,5 +77,4 @@ class Planet < Oxidized::Model end pre_logout 'exit' end - end diff --git a/lib/oxidized/model/powerconnect.rb b/lib/oxidized/model/powerconnect.rb index f602a36..bf36f65 100644 --- a/lib/oxidized/model/powerconnect.rb +++ b/lib/oxidized/model/powerconnect.rb @@ -1,12 +1,11 @@ class PowerConnect < Oxidized::Model - prompt /^([\w\s.@-]+[#>]\s?)$/ # allow spaces in hostname..dell does not limit it.. # - comment '! ' + comment '! ' expect /^\s*--More--\s+.*$/ do |data, re| - send ' ' - data.sub re, '' + send ' ' + data.sub re, '' end cmd :all do |cfg| @@ -22,7 +21,7 @@ class PowerConnect < Oxidized::Model if (@stackable.nil?) @stackable = true if cfg.match /(U|u)nit\s/ end - cfg = cfg.split("\n").select { |line| not line[/Up\sTime/] } + cfg = cfg.split("\n").reject { |line| line[/Up\sTime/] } comment cfg.join("\n") + "\n" end @@ -52,7 +51,6 @@ class PowerConnect < Oxidized::Model post_login "terminal length 0" pre_logout "logout" pre_logout "exit" - end def clean cfg @@ -72,9 +70,8 @@ class PowerConnect < Oxidized::Model end out << line.strip end - out = out.select { |line| not line[/Up\sTime/] } + out = out.reject { |line| line[/Up\sTime/] } out = comment out.join "\n" out << "\n" end - end diff --git a/lib/oxidized/model/procurve.rb b/lib/oxidized/model/procurve.rb index 444fb5b..f9175b1 100644 --- a/lib/oxidized/model/procurve.rb +++ b/lib/oxidized/model/procurve.rb @@ -1,10 +1,9 @@ class Procurve < Oxidized::Model - # some models start lines with \r # previous command is repeated followed by "\eE", which sometimes ends up on last line prompt /^\r?([\w.-]+# )$/ - comment '! ' + comment '! ' # replace next line control sequence with a new line expect /(\e\[1M\e\[\??\d+(;\d+)*[A-Za-z]\e\[1L)|(\eE)/ do |data, re| @@ -67,7 +66,7 @@ class Procurve < Oxidized::Model # not supported on all models cmd 'show system information' do |cfg| - cfg = cfg.each_line.select { |line| not line.match /(.*CPU.*)|(.*Up Time.*)|(.*Total.*)|(.*Free.*)|(.*Lowest.*)|(.*Missed.*)/ } + cfg = cfg.each_line.reject { |line| line.match /(.*CPU.*)|(.*Up Time.*)|(.*Total.*)|(.*Free.*)|(.*Lowest.*)|(.*Missed.*)/ } cfg = cfg.join comment cfg end @@ -80,6 +79,13 @@ class Procurve < Oxidized::Model end cfg :telnet, :ssh do + # preferred way to handle additional passwords + if vars :enable + post_login do + send "enable\n" + cmd vars(:enable) + end + end post_login 'no page' pre_logout "logout\ny\nn" end @@ -87,5 +93,4 @@ class Procurve < Oxidized::Model cfg :ssh do pty_options({ chars_wide: 1000 }) end - end diff --git a/lib/oxidized/model/quantaos.rb b/lib/oxidized/model/quantaos.rb index 5197aa8..8dbdf3b 100644 --- a/lib/oxidized/model/quantaos.rb +++ b/lib/oxidized/model/quantaos.rb @@ -1,13 +1,12 @@ class QuantaOS < Oxidized::Model - prompt /^\((\w|\S)+\) (>|#)$/ comment '! ' - + cmd 'show run' do |cfg| cfg.each_line.select do |line| not line.match /^!.*$/ and - not line.match /^\((\w|\S)+\) (>|#)$/ and - not line.match /^show run$/ + not line.match /^\((\w|\S)+\) (>|#)$/ and + not line.match /^show run$/ end.join end @@ -31,5 +30,4 @@ class QuantaOS < Oxidized::Model send "n\n" end end - end diff --git a/lib/oxidized/model/routeros.rb b/lib/oxidized/model/routeros.rb index 6717446..c729126 100644 --- a/lib/oxidized/model/routeros.rb +++ b/lib/oxidized/model/routeros.rb @@ -18,9 +18,9 @@ class RouterOS < Oxidized::Model run_cmd = vars(:remove_secret) ? '/export hide-sensitive' : '/export' cmd run_cmd do |cfg| cfg.gsub! /\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/, '' # strip ANSI colours - cfg.gsub! /\\\r\n\s+/, '' # strip new line - cfg.gsub! /# inactive time\r\n/, '' # Remove time based system comment - cfg = cfg.split("\n").select { |line| not line[/^\#\s\w{3}\/\d{2}\/\d{4}.*$/] } + cfg.gsub! /\\\r\n\s+/, '' # strip new line + cfg.gsub! /# inactive time\r\n/, '' # Remove time based system comment + cfg = cfg.split("\n").reject { |line| line[/^\#\s\w{3}\/\d{2}\/\d{4}.*$/] } cfg.join("\n") + "\n" end end diff --git a/lib/oxidized/model/saos.rb b/lib/oxidized/model/saos.rb index 5a4e79e..97547b5 100644 --- a/lib/oxidized/model/saos.rb +++ b/lib/oxidized/model/saos.rb @@ -1,5 +1,4 @@ class SAOS < Oxidized::Model - # Ciena SAOS switch # used for 6.x devices diff --git a/lib/oxidized/model/screenos.rb b/lib/oxidized/model/screenos.rb index 0258898..9b52f9f 100644 --- a/lib/oxidized/model/screenos.rb +++ b/lib/oxidized/model/screenos.rb @@ -1,8 +1,7 @@ -class ScreenOS < Oxidized::Model - +class ScreenOS < Oxidized::Model # Netscreen ScreenOS model # - comment '! ' + comment '! ' prompt /^[\w.:\(\)-]+->\s?$/ @@ -10,7 +9,7 @@ class ScreenOS < Oxidized::Model cfg.each_line.to_a[2..-2].join end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(set admin name) .*|^(set admin password) .*/, '\\1 <removed>' cfg.gsub! /^(set admin user .* password) .* (.*)/, '\\1 <removed> \\2' cfg.gsub! /(secret|password|preshare) .*/, '\\1 <secret hidden>' @@ -41,5 +40,4 @@ class ScreenOS < Oxidized::Model send "n" end end - end diff --git a/lib/oxidized/model/sgos.rb b/lib/oxidized/model/sgos.rb index 3d42a53..894e042 100644 --- a/lib/oxidized/model/sgos.rb +++ b/lib/oxidized/model/sgos.rb @@ -1,5 +1,4 @@ class SGOS < Oxidized::Model - comment '!- ' prompt /\w+>|#/ @@ -20,14 +19,14 @@ class SGOS < Oxidized::Model comment cfg end - cmd :secret do |cfg| + cmd :secret do |cfg| cfg.gsub! /^(security hashed-enable-password).*/, '\\1 <secret hidden>' cfg.gsub! /^(security hashed-password).*/, '\\1 <secret hidden>' cfg end cmd 'show configuration expanded noprompts with-keyrings unencrypted' do |cfg| - cfg.gsub! /^(!- Local time).*/,"" + cfg.gsub! /^(!- Local time).*/, "" cfg.gsub! /^(archive-configuration encrypted-password).*/, "" cfg.gsub! /^(download encrypted-password).*/, "" cfg diff --git a/lib/oxidized/model/siklu.rb b/lib/oxidized/model/siklu.rb index 2bdfbc3..2203bda 100644 --- a/lib/oxidized/model/siklu.rb +++ b/lib/oxidized/model/siklu.rb @@ -1,5 +1,4 @@ class Siklu < Oxidized::Model - # Siklu EtherHaul # prompt /^[\w-]+>$/ @@ -15,5 +14,4 @@ class Siklu < Oxidized::Model cfg :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/slxos.rb b/lib/oxidized/model/slxos.rb index 934da5b..1afc8b1 100644 --- a/lib/oxidized/model/slxos.rb +++ b/lib/oxidized/model/slxos.rb @@ -1,35 +1,34 @@ class SLXOS < Oxidized::Model - prompt /^.*[>#]\s?$/i - comment '! ' + comment '! ' cmd 'show version' do |cfg| - cfg.gsub! /(^((.*)[Ss]ystem [Uu]ptime(.*))$)/, '' #remove unwanted line system uptime - cfg.gsub! /[Uu]p\s?[Tt]ime is .*/,'' + cfg.gsub! /(^((.*)[Ss]ystem [Uu]ptime(.*))$)/, '' # remove unwanted line system uptime + cfg.gsub! /[Uu]p\s?[Tt]ime is .*/, '' comment cfg end cmd 'show chassis' do |cfg| - cfg.encode!("UTF-8", :invalid => :replace, :undef => :replace) #sometimes ironware returns broken encoding - cfg.gsub! /.*Power Usage.*/, '' #remove unwanted lines power usage - cfg.gsub! /Time A(live|wake).*/, '' #remove unwanted lines time alive/awake + cfg.encode!("UTF-8", :invalid => :replace, :undef => :replace) # sometimes ironware returns broken encoding + cfg.gsub! /.*Power Usage.*/, '' # remove unwanted lines power usage + cfg.gsub! /Time A(live|wake).*/, '' # remove unwanted lines time alive/awake cfg.gsub! /([\[]*)1([\]]*)<->([\[]*)2([\]]*)(<->([\[]*)3([\]]*))*/, '' comment cfg end cmd 'show system' do |cfg| - cfg.gsub! /Up Time.*/, '' #removes uptime line - cfg.gsub! /Current Time.*/, '' #remove current time line - cfg.gsub! /.*speed is.*/, '' #removes fan speed lines + cfg.gsub! /Up Time.*/, '' # removes uptime line + cfg.gsub! /Current Time.*/, '' # remove current time line + cfg.gsub! /.*speed is.*/, '' # removes fan speed lines comment cfg end cmd 'show slots' do |cfg| cfg.gsub! /^-*^$/, '' # some slx devices are fixed config - cfg.gsub! /syntax error: element does not exist/, '' # same as above + cfg.gsub! /syntax error: element does not exist/, '' # same as above comment cfg end @@ -45,7 +44,7 @@ class SLXOS < Oxidized::Model password /^(Please Enter Password ?|Password):/ end - #handle pager with enable + # handle pager with enable cfg :telnet, :ssh do if vars :enable post_login do @@ -55,7 +54,6 @@ class SLXOS < Oxidized::Model end post_login '' post_login 'terminal length 0' - pre_logout 'exit' + pre_logout 'exit' end - end diff --git a/lib/oxidized/model/sros.rb b/lib/oxidized/model/sros.rb index 289bed3..d809147 100644 --- a/lib/oxidized/model/sros.rb +++ b/lib/oxidized/model/sros.rb @@ -1,5 +1,4 @@ class SROS < Oxidized::Model - # # Nokia SR OS (TiMOS) (formerly TiMetra, Alcatel, Alcatel-Lucent). # Used in 7705 SAR, 7210 SAS, 7450 ESS, 7750 SR, 7950 XRS, and NSP. diff --git a/lib/oxidized/model/stoneos.rb b/lib/oxidized/model/stoneos.rb new file mode 100644 index 0000000..d2bc017 --- /dev/null +++ b/lib/oxidized/model/stoneos.rb @@ -0,0 +1,32 @@ +class StoneOS < Oxidized::Model + # Hillstone Networks StoneOS software + + prompt /^\r?[\w.()-]+[#>](\s)?$/ + comment '# ' + + expect /^\s.*--More--.*$/ do |data, re| + send ' ' + data.sub re, '' + end + + cmd :all do |cfg| + cfg.each_line.to_a[1..-2].join + end + + cmd 'show configuration running' + + cmd 'show version' do |cfg| + comment cfg + end + + cfg :telnet do + username(/^login:/) + password(/^Password:/) + end + + cfg :telnet, :ssh do + post_login 'terminal length 256' + post_login 'terminal width 512' + pre_logout 'exit' + end +end diff --git a/lib/oxidized/model/tmos.rb b/lib/oxidized/model/tmos.rb index 390046d..69b0e1b 100644 --- a/lib/oxidized/model/tmos.rb +++ b/lib/oxidized/model/tmos.rb @@ -1,5 +1,4 @@ class TMOS < Oxidized::Model - comment '# ' cmd :secret do |cfg| @@ -46,7 +45,6 @@ class TMOS < Oxidized::Model cmd('cat /config/partitions/*/bigip.conf') { |cfg| comment cfg } cfg :ssh do - exec true # don't run shell, run each command in exec channel + exec true # don't run shell, run each command in exec channel end - end diff --git a/lib/oxidized/model/tplink.rb b/lib/oxidized/model/tplink.rb index bf13803..2a61fa5 100644 --- a/lib/oxidized/model/tplink.rb +++ b/lib/oxidized/model/tplink.rb @@ -1,26 +1,25 @@ class TPLink < Oxidized::Model - # tp-link prompt prompt /^\r?([\w.@()-]+[#>]\s?)$/ - comment '! ' + comment '! ' # handle paging # workaround for sometimes missing whitespaces with "\s?" expect /Press\s?any\s?key\s?to\s?continue\s?\(Q\s?to\s?quit\)/ do |data, re| - send ' ' - data.sub re, '' + send ' ' + data.sub re, '' end # send carriage return because \n with the command is not enough # checks if line ends with prompt >,# or \r,\nm otherwise send \r expect /[^>#\r\n]$/ do |data, re| - send "\r" - data.sub re, '' + send "\r" + data.sub re, '' end cmd :all do |cfg| # normalize linefeeds - cfg.gsub! /(\r|\r\n|\n\r)/,"\n" + cfg.gsub! /(\r|\r\n|\n\r)/, "\n" # remove empty lines cfg.each_line.reject { |line| line.match /^[\r\n\s\u0000#]+$/ }.join end @@ -31,7 +30,7 @@ class TPLink < Oxidized::Model cfg end - cmd 'show system-info' do |cfg| + cmd 'show system-info' do |cfg| comment cfg.each_line.to_a[3..-3].join end @@ -58,8 +57,5 @@ class TPLink < Oxidized::Model send "exit\r" send "logout\r" end - end - end - diff --git a/lib/oxidized/model/trango.rb b/lib/oxidized/model/trango.rb index b2aa1e7..b55b277 100644 --- a/lib/oxidized/model/trango.rb +++ b/lib/oxidized/model/trango.rb @@ -1,8 +1,8 @@ class Trango < Oxidized::Model # take a Trangolink sysinfo output and turn it into a configuration file - + prompt /^#>\s?/ - comment '# ' + comment '# ' cmd 'sysinfo' do |cfg| out = [] @@ -47,16 +47,15 @@ class Trango < Oxidized::Model end if line.match /\[IP\] (\S+) \[Subnet Mask\] (\S+) \[Gateway\] (\S+)/ out << "ipconfig " + Regexp.last_match[1] + ' ' + - Regexp.last_match[2] + ' ' + - Regexp.last_match[3] + Regexp.last_match[2] + ' ' + + Regexp.last_match[3] end - end + end comments.push(*out).join "\n" - end + end cfg :telnet do password /Password:/ pre_logout 'exit' end - end diff --git a/lib/oxidized/model/ucs.rb b/lib/oxidized/model/ucs.rb index a1f6c10..4418b68 100644 --- a/lib/oxidized/model/ucs.rb +++ b/lib/oxidized/model/ucs.rb @@ -1,5 +1,4 @@ class UCS < Oxidized::Model - prompt /^(\r?[\w.@_()-]+[#]\s?)$/ comment '! ' diff --git a/lib/oxidized/model/voltaire.rb b/lib/oxidized/model/voltaire.rb index 1e7fad2..62a62e5 100644 --- a/lib/oxidized/model/voltaire.rb +++ b/lib/oxidized/model/voltaire.rb @@ -1,18 +1,16 @@ class VOLTAIRE < Oxidized::Model - prompt /([\w.@()-\[:\s\]]+[#>]\s|(One or more tests have failed.*))$/ - comment '## ' - + comment '## ' + # Pager Handling expect /.+lines\s\d+\-\d+([\s]|\/\d+\s\(END\)\s).+$/ do |data, re| send ' ' data.sub re, '' end - cmd :all do |cfg| cfg.gsub! /\[\?1h=\r/, '' # Pager Handling - cfg.gsub! /\r\[K/,'' # Pager Handling + cfg.gsub! /\r\[K/, '' # Pager Handling cfg.gsub! /\s/, '' # Linebreak Handling cfg.gsub! /^CPU\ load\ averages\:\s.+/, '' # Omit constantly changing CPU info cfg.gsub! /^System\ memory\:\s.+/, '' # Omit constantly changing memory info @@ -27,7 +25,6 @@ class VOLTAIRE < Oxidized::Model cfg end - cmd 'version show' do |cfg| comment cfg end diff --git a/lib/oxidized/model/voss.rb b/lib/oxidized/model/voss.rb index 6b15fb3..32958ce 100644 --- a/lib/oxidized/model/voss.rb +++ b/lib/oxidized/model/voss.rb @@ -10,7 +10,7 @@ class Voss < Oxidized::Model # needed for proper formatting after post_login cmd('') { |cfg| comment "#{cfg}\n" } - + # Get sys-info and remove information that changes such has temperature and power cmd 'show sys-info' do |cfg| cfg.gsub! /(^((.*)SysUpTime(.*))$)/, 'removed SysUpTime' @@ -38,5 +38,4 @@ class Voss < Oxidized::Model post_login 'enable' post_login 'terminal more disable' end - end diff --git a/lib/oxidized/model/vrp.rb b/lib/oxidized/model/vrp.rb index 98229c3..42762c2 100644 --- a/lib/oxidized/model/vrp.rb +++ b/lib/oxidized/model/vrp.rb @@ -1,6 +1,6 @@ class VRP < Oxidized::Model # Huawei VRP - + prompt /^(<[\w.-]+>)$/ comment '# ' @@ -13,19 +13,19 @@ class VRP < Oxidized::Model cmd :all do |cfg| cfg.each_line.to_a[1..-2].join end - + cfg :telnet do username /^Username:$/ password /^Password:$/ end - cfg :telnet, :ssh do + cfg :telnet, :ssh do post_login 'screen-length 0 temporary' pre_logout 'quit' end cmd 'display version' do |cfg| - cfg = cfg.each_line.select {|l| not l.match /uptime/ }.join + cfg = cfg.each_line.reject { |l| l.match /uptime/ }.join comment cfg end @@ -36,5 +36,4 @@ class VRP < Oxidized::Model cmd 'display current-configuration all' do |cfg| cfg end - end diff --git a/lib/oxidized/model/vyatta.rb b/lib/oxidized/model/vyatta.rb index 57ec9d3..fb6b0d1 100644 --- a/lib/oxidized/model/vyatta.rb +++ b/lib/oxidized/model/vyatta.rb @@ -1,7 +1,6 @@ class Vyatta < Oxidized::Model - # Brocade Vyatta / VyOS model # - + prompt /\@.*?\:~\$\s/ cmd :all do |cfg| @@ -27,5 +26,4 @@ class Vyatta < Oxidized::Model cfg :telnet, :ssh do pre_logout 'exit' end - end diff --git a/lib/oxidized/model/weos.rb b/lib/oxidized/model/weos.rb index 1b20286..2856666 100644 --- a/lib/oxidized/model/weos.rb +++ b/lib/oxidized/model/weos.rb @@ -1,6 +1,5 @@ class WEOS < Oxidized::Model - - #Westell WEOS, works with Westell 8178G, Westell 8266G + # Westell WEOS, works with Westell 8178G, Westell 8266G prompt /^(\s[\w.@-]+[#>]\s?)$/ @@ -18,5 +17,4 @@ class WEOS < Oxidized::Model post_login 'cli more disable' pre_logout 'logout' end - end diff --git a/lib/oxidized/model/xos.rb b/lib/oxidized/model/xos.rb index 90f6f4a..5ce8017 100644 --- a/lib/oxidized/model/xos.rb +++ b/lib/oxidized/model/xos.rb @@ -1,5 +1,4 @@ class XOS < Oxidized::Model - # Extreme Networks XOS prompt /^*?[\w .-]+# $/ @@ -8,7 +7,7 @@ class XOS < Oxidized::Model cmd :all do |cfg| # xos inserts leading \r characters and other trailing white space. # this deletes extraneous \r and trailing white space. - cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[1..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'show version' do |cfg| @@ -23,11 +22,14 @@ class XOS < Oxidized::Model comment cfg end - cmd 'show switch'do |cfg| + cmd 'show switch' do |cfg| comment cfg.each_line.reject { |line| line.match /Time:/ or line.match /boot/i }.join end - cmd 'show configuration' + cmd 'show configuration' do |cfg| + cfg = cfg.each_line.reject { |line| line.match /^#(\s[\w]+\s)(Configuration generated)/ }.join + cfg + end cmd 'show policy detail' do |cfg| comment cfg @@ -45,5 +47,4 @@ class XOS < Oxidized::Model send "n\n" end end - end diff --git a/lib/oxidized/model/zhoneolt.rb b/lib/oxidized/model/zhoneolt.rb index b60edb2..ce6df29 100644 --- a/lib/oxidized/model/zhoneolt.rb +++ b/lib/oxidized/model/zhoneolt.rb @@ -18,7 +18,7 @@ class ZhoneOLT < Oxidized::Model end cmd :all do |cfg| - cfg.each_line.to_a[1..-2].map{|line|line.delete("\r").rstrip}.join("\n") + "\n" + cfg.each_line.to_a[1..-2].map { |line| line.delete("\r").rstrip }.join("\n") + "\n" end cmd 'swversion' do |cfg| @@ -39,7 +39,7 @@ class ZhoneOLT < Oxidized::Model end cmd 'dump console' do |cfg| - cfg = cfg.each_line.select { |line| not line.match /To Abort the operation enter Ctrl-C/ }.join + cfg = cfg.each_line.reject { |line| line.match /To Abort the operation enter Ctrl-C/ }.join end # zhone technically supports ssh, but it locks up a ton. Especially when diff --git a/lib/oxidized/model/zynos.rb b/lib/oxidized/model/zynos.rb index 89be8af..581d405 100644 --- a/lib/oxidized/model/zynos.rb +++ b/lib/oxidized/model/zynos.rb @@ -1,12 +1,10 @@ class ZyNOS < Oxidized::Model - # Used in Zyxel DSLAMs, such as SAM1316 - comment '! ' + comment '! ' cmd 'config-0' cfg :ftp do end - end diff --git a/lib/oxidized/model/zynoscli.rb b/lib/oxidized/model/zynoscli.rb new file mode 100644 index 0000000..ae64b04 --- /dev/null +++ b/lib/oxidized/model/zynoscli.rb @@ -0,0 +1,36 @@ +class ZyNOSCLI < Oxidized::Model + # Used in Zyxel DSLAMs, such as SAM1316 + + # Typical prompt "XGS4600#" + prompt /^([\w.@()-]+[#>]\s\e7)$/ + comment ';; ' + + cmd :all do |cfg| + cfg.gsub! /^.*\e7/, '' + end + cmd 'show stacking' + + cmd 'show version' + + cmd 'show running-config' + + cfg :telnet do + username /^User name:/i + password /^Password:/i + end + + cfg :telnet, :ssh do + if vars :enable + post_login do + send "enable\n" + # Interpret enable: true as meaning we won't be prompted for a password + unless vars(:enable).is_a? TrueClass + expect /[pP]assword:\s?$/ + send vars(:enable) + "\n" + end + expect /^.+[#]$/ + end + end + pre_logout 'exit' + end +end |