diff options
author | Robert Drake <rfdrake@users.noreply.github.com> | 2017-03-23 22:49:23 -0400 |
---|---|---|
committer | Robert Drake <rfdrake@users.noreply.github.com> | 2017-03-23 22:49:23 -0400 |
commit | da074381e4b998270e0886152446de7945ba120e (patch) | |
tree | d8740d07d4e22e4cb2d9e29f756f9800983d4da5 | |
parent | 4a67e27742c0ab8ed6cd8421d34c01c0de588705 (diff) |
Adding support for more "show version" commands
This is a port of some of the rancid "show version" parsing. I tried to
simplify it from the way rancid does it, so it doesn't attempt to guess
the device type, but it does provide IOS version and the type of
processor.
-rw-r--r-- | lib/oxidized/model/ios.rb | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/oxidized/model/ios.rb b/lib/oxidized/model/ios.rb index 94a3ab0..d155aa6 100644 --- a/lib/oxidized/model/ios.rb +++ b/lib/oxidized/model/ios.rb @@ -19,6 +19,8 @@ class IOS < Oxidized::Model cmd :all do |cfg| #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\./, '' cfg.each_line.to_a[1..-2].join end @@ -36,7 +38,42 @@ class IOS < Oxidized::Model end cmd 'show version' do |cfg| - comment cfg.lines.first + comments = [] + comments << cfg.lines.first + lines = cfg.lines + 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 /(\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}"; + end + + if line.match /^System image file is "([^\"]*)"$/ + comments << "Image: #{$1}" + end + end + comments << "\n" + comment comments.join "\n" end cmd 'show inventory' do |cfg| |