From EMG, 1 Month ago, written in Plain Text.
Embed
  1. class AOSW < Oxidized>]\s?)$/
  2.   prompt /^(\^M)?([\w\(:.@-]+(\)\s?[\^\*]?\[?\w*\]?\s?)\*?[#>]\s?)$/
  3.  
  4.   cmd :all do |cfg|
  5.     cfg.cut_both
  6.   end
  7.  
  8.   cmd :secret do |cfg|
  9.     cfg.gsub!(/secret (\S+)$/, 'secret <secret>')
  10.     cfg.gsub!(/enable secret (\S+)$/, 'enable secret <secret>')
  11.     cfg.gsub!(/PRE-SHARE (\S+)$/, 'PRE-SHARE <secret>')
  12.     cfg.gsub!(/ipsec (\S+)$/, 'ipsec <secret>')
  13.     cfg.gsub!(/community (\S+)$/, 'community <secret>')
  14.     cfg.gsub!(/ sha (\S+)/, ' sha <secret>')
  15.     cfg.gsub!(/ des (\S+)/, ' des <secret>')
  16.     cfg.gsub!(/mobility-manager (\S+) user (\S+) (\S+)/, 'mobility-manager \1 user \2 <secret>')
  17.     cfg.gsub!(/mgmt-user (\S+) (root|guest-provisioning|network-operations|read-only|location-api-mgmt) (\S+)$/, 'mgmt-user \1 \2 <secret>') # MAS & Wireless Controler
  18.     cfg.gsub!(/mgmt-user (\S+) (\S+)( (read-only|guest-mgmt))?$/, 'mgmt-user \1 <secret> \3') # IAP
  19.     # MAS format: mgmt-user <username> <accesslevel> <password>
  20.     # IAP format (root user): mgmt-user <username> <password>
  21.     # IAP format: mgmt-user <username> <password> <access>
  22.     cfg.gsub!(/key (\S+)$/, 'key <secret>')
  23.     cfg.gsub!(/wpa-passphrase (\S+)$/, 'wpa-passphrase <secret>')
  24.     cfg.gsub!(/bkup-passwords (\S+)$/, 'bkup-passwords <secret>')
  25.     cfg.gsub!(/user (\S+) (\S+) (\S+)$/, 'user \1 <secret> \3')
  26.     cfg.gsub!(/virtual-controller-key (\S+)$/, 'virtual-controller-key <secret>')
  27.     cfg
  28.   end
  29.  
  30.   cmd 'show version' do |cfg|
  31.     cfg = cfg.each_line.reject { |line| line.match(/(Switch|AP) uptime/i) || line.match(/Reboot Time and Cause/i) }
  32.     rstrip_cfg comment cfg.join
  33.   end
  34.  
  35.   cmd 'show inventory' do |cfg|
  36.     cfg = "" if cfg =~ /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
  37.     rstrip_cfg clean cfg
  38.  
  39.   cmd 'show slots' do |cfg|
  40.     cfg = "" if cfg =~ /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
  41.     rstrip_cfg comment cfg
  42.   end
  43.  
  44.   cmd 'show license' do |cfg|
  45.     cfg = "" if cfg =~ /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
  46.     rstrip_cfg comment cfg
  47.   end
  48.  
  49.   cmd 'show license passphrase' do |cfg|
  50.     cfg = "" if cfg.match /(Invalid input detected at '\^' marker|Parse error)/ # Don't show for unsupported devices (IAP and MAS)
  51.     rstrip_cfg comment cfg
  52.   end
  53.  
  54.   cmd 'show running-config' do |cfg|
  55.     out = []
  56.     cfg.each_line do |line|
  57.       next if line =~ /^controller config \d+$/
  58.       next if line =~ /^Building Configuration/
  59.  
  60.       out &lt;&lt; line.strip
  61.     end
  62.     out = out.join "\n"
  63.     out &lt;&lt; "\n"
  64.   end
  65.  
  66.   cfg :telnet do
  67.     username /^User:\s*/
  68.     password /^Password:\s*/
  69.   end
  70.  
  71.   cfg :ssh do
  72.     if vars :enable
  73.       post_login do
  74.         send "enable\n"
  75.         cmd vars(:enable)
  76.       end
  77.     end
  78.     #post_login "no paging\nencrypt disable\nshow running"
  79.     post_login "no paging\nshow version"
  80.     #post_login 'show running'
  81.     #post_login 'encrypt disable'
  82.     pre_logout 'exit' if vars :enable
  83.     pre_logout 'exit'
  84.   end
  85.  
  86.   def rstrip_cfg(cfg)
  87.     out = []
  88.     cfg.each_line do |line|
  89.       out &lt;&lt; line.rstrip
  90.     end
  91.     out = out.join "\n"
  92.     out &lt;&lt; "\n"
  93.   end
  94.  
  95.   def clean(cfg)
  96.     out = []
  97.     cfg.each_line do |line|
  98.       # drop the temperature, fan speed and voltage, which change each run
  99.       next if line =~ /Output \d Config/i
  100.       next if line =~ /(Tachometers|Temperatures|Voltages)/
  101.       next if line =~ /((Card|CPU) Temperature|Chassis Fan|VMON1[0-9])/
  102.       next if line =~ /[0-9]+\s+(RPMS?|m?V|C)/i
  103.  
  104.       out &lt;&lt; line.strip
  105.     end
  106.     out = comment out.join "\n"
  107.     out &lt;&lt; "\n"
  108.   end
  109. end