diff options
Diffstat (limited to 'lib/oxidized/model')
| -rw-r--r-- | lib/oxidized/model/aosw.rb | 22 | ||||
| -rw-r--r-- | lib/oxidized/model/comware.rb | 41 | ||||
| -rw-r--r-- | lib/oxidized/model/model.rb | 31 | ||||
| -rw-r--r-- | lib/oxidized/model/outputs.rb | 41 | 
4 files changed, 121 insertions, 14 deletions
| diff --git a/lib/oxidized/model/aosw.rb b/lib/oxidized/model/aosw.rb index 26ee0fa..203c5e0 100644 --- a/lib/oxidized/model/aosw.rb +++ b/lib/oxidized/model/aosw.rb @@ -1,7 +1,8 @@  class AOSW < Oxidized::Model -  # AOSW - Alcatel-Lucent OS - Wireless  -  # Used in Alcatel OAW-4750 WLAN controller (Aruba) +  # AOSW Aruba Wireless +  # Used in Alcatel OAW-4750 WLAN controller +  # Also Dell controllers    comment  '# '    prompt /^\([^)]+\) #/ @@ -16,8 +17,7 @@ class AOSW < Oxidized::Model    end    cmd 'show inventory' do |cfg| -    cfg = cfg.each_line.take_while { |line| not line.match /Output \d Config/i } -    comment cfg.join +    clean cfg    end    cmd 'show slots' do |cfg| @@ -40,4 +40,18 @@ class AOSW < Oxidized::Model      pre_logout 'exit'    end +  def clean cfg +    out = [] +    cfg.each_line do |line| +      # drop the temperature, fan speed and voltage, which change each run +      next if line.match /Output \d Config/i +      next if line.match /(Tachometers|Temperatures|Voltages)/ +      next if line.match /((Card|CPU) Temperature|Chassis Fan|VMON1[0-9])/ +      next if line.match /[0-9]+ (RPM|mV|C)$/ +      out << line.strip +    end +    out = out.join "\n" +    out << "\n" +  end +  end diff --git a/lib/oxidized/model/comware.rb b/lib/oxidized/model/comware.rb new file mode 100644 index 0000000..c09a128 --- /dev/null +++ b/lib/oxidized/model/comware.rb @@ -0,0 +1,41 @@ +class Comware < Oxidized::Model +  # HP (A-series)/H3C/3Com Comware +   +  prompt /^(<[\w.-]+>)$/ +  comment '# ' + +  # example how to handle pager +  #expect /^\s*---- More ----$/ do |data, re| +  #  send ' ' +  #  data.sub re, '' +  #end + +  cmd :all do |cfg| +    #cfg.gsub! /^.*\e\[42D/, ''        # example how to handle pager +    cfg.each_line.to_a[1..-2].join +  end +  +  cfg :telnet do +    username /^Username:$/ +    password /^Password:$/ +  end + +  cfg :telnet, :ssh do +    post_login 'screen-length disable' +    post_login 'undo terminal monitor' +    pre_logout 'quit' +  end + +  cmd 'display version' do |cfg| +    cfg = cfg.each_line.select {|l| not l.match /uptime/ }.join +    comment cfg +  end + +  cmd 'display device' do |cfg| +    comment cfg +  end + +  cmd 'display current-configuration' do |cfg| +    cfg +  end +end diff --git a/lib/oxidized/model/model.rb b/lib/oxidized/model/model.rb index c3d8760..d3f54b9 100644 --- a/lib/oxidized/model/model.rb +++ b/lib/oxidized/model/model.rb @@ -1,3 +1,5 @@ +require_relative 'outputs' +  module Oxidized    class Model      include Oxidized::Config::Vars @@ -77,17 +79,16 @@ module Oxidized      def cmd string, &block        out = @input.cmd string        return false unless out -      out = Oxidized::String.new out        self.class.cmds[:all].each do |all_block| -        out = instance_exec out, string, &all_block +        out = instance_exec Oxidized::String.new(out), string, &all_block        end        if vars :remove_secret          self.class.cmds[:secret].each do |all_block| -          out = instance_exec out, string, &all_block +          out = instance_exec Oxidized::String.new(out), string, &all_block          end        end -      out = instance_exec out, &block if block -      out +      out = instance_exec Oxidized::String.new(out), &block if block +      process_cmd_output out, string      end      def output @@ -124,20 +125,20 @@ module Oxidized      end      def get -      data, pre = '', '' +      outputs = Outputs.new        procs = self.class.procs        self.class.cmds[:cmd].each do |command, block|          out = cmd command, &block          return false unless out -        data << out.to_s +        outputs << out        end        procs[:pre].each do |pre_proc| -        pre << instance_eval(&pre_proc).to_s +        outputs.unshift Oxidized::String.new(instance_eval(&pre_proc))        end        procs[:post].each do |post_proc| -        data << instance_eval(&post_proc).to_s +        outputs << Oxidized::String.new(instance_eval(&post_proc))        end -      pre + data +      outputs      end      def comment _comment @@ -148,5 +149,15 @@ module Oxidized        data      end +    private + +    def process_cmd_output output, name +      if output.class != Oxidized::String +        output = Oxidized::String.new output +      end +      output.set_cmd(name) +      output +    end +    end  end diff --git a/lib/oxidized/model/outputs.rb b/lib/oxidized/model/outputs.rb new file mode 100644 index 0000000..a668e9d --- /dev/null +++ b/lib/oxidized/model/outputs.rb @@ -0,0 +1,41 @@ +module Oxidized +  class Model +    class Outputs + +      def to_cfg +        type_to_str(nil) +      end + +      def type_to_str want_type +        type(want_type).map { |out| out }.join +      end + +      def << output +        @outputs << output +      end + +      def unshift output +        @outputs.unshift output +      end + +      def all +        @outputs +      end + +      def type type +        @outputs.select { |out| out.type==type } +      end + +      def types +        @outputs.map { |out| out.type }.uniq.compact +      end + +      private + +      def initialize +        @outputs = [] +      end + +    end +  end +end | 
