diff options
Diffstat (limited to 'lib/oxidized/input')
| -rw-r--r-- | lib/oxidized/input/tftp | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/lib/oxidized/input/tftp b/lib/oxidized/input/tftp new file mode 100644 index 0000000..bfb69f6 --- /dev/null +++ b/lib/oxidized/input/tftp @@ -0,0 +1,58 @@ +module Oxidized +  require 'net/tftp' +  require 'timeout' +  require 'stringio' +  require_relative 'cli' + +  class TFTP < Input +    RescueFail = { +      :debug => [ +        #Net::SSH::Disconnect, +      ], +      :warn => [ +        #RuntimeError, +        #Net::SSH::AuthenticationFailed, +      ], +    } +     +    include Input::CLI +     +    # TFTP utilizes UDP, there is not a connection. We simply specify an IP and send/receive data. +    def connect node +      @node       = node + +      @node.model.cfg['tftp'].each { |cb| instance_exec(&cb) } +      @log = File.open(Oxidized::Config::Log + "/#{@node.ip}-tftp", 'w') if Oxidized.config.input.debug? +      @tftp = Net::TFTP.new @node.ip +    end + +    def cmd file +      Oxidized.logger.info file.methods(true) +      Oxidized.logger.debug "TFTP: #{file} @ #{@node.name}" +      config = StringIO.new +      @tftp.getbinary file, config +      config.rewind +      config.read +    end +     + +    # meh not sure if this is the best way, but perhaps better than not implementing send +    def send my_proc +      my_proc.call +    end + +    def output +      "" +    end + +    private + +    def disconnect +      # TFTP uses UDP, there is no connection to close +    #rescue Errno::ECONNRESET, IOError +    ensure +      @log.close if Oxidized.config.input.debug? +    end + +  end +end | 
