diff options
author | MajesticFalcon <Schylarutley@hotmail.com> | 2016-08-30 17:49:14 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-30 17:49:14 -0500 |
commit | 87e95ab4f947d33e0fc42bb8892cb0112f620b43 (patch) | |
tree | 057a99408a491566e7737b25a17950f4788e4dac | |
parent | 340aa7eff51f3c08a2764b3c5882b0568b1442fb (diff) |
Add UDP TFTP
-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 |