diff options
author | James F. Carter <james.carter@bytemark.co.uk> | 2016-04-21 13:14:42 +0100 |
---|---|---|
committer | James F. Carter <james.carter@bytemark.co.uk> | 2016-04-21 13:14:42 +0100 |
commit | 0197e6c3e33ae5870436107cdb63fe56f9f45484 (patch) | |
tree | f8bf368e70df92a25c9a1bfae3f3840489b2f391 /lib/custodian/util/tftp.rb | |
parent | e33455736a49b95876b77552df9c130ad687c5fd (diff) |
added a simple tftp utility
Diffstat (limited to 'lib/custodian/util/tftp.rb')
-rw-r--r-- | lib/custodian/util/tftp.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/custodian/util/tftp.rb b/lib/custodian/util/tftp.rb new file mode 100644 index 0000000..3028874 --- /dev/null +++ b/lib/custodian/util/tftp.rb @@ -0,0 +1,52 @@ +require 'tmpdir' +require 'fileutils' + +module Custodian + + module Util + + class Tftp + + attr_reader :hostname, :port, :filename + + # + # Store hostname and port + # + def initialize(hostname, port=69) + + raise ArgumentError, 'Hostname must not be nil' if hostname.nil? + raise ArgumentError, 'Hostname must be a String' unless hostname.kind_of?(String) + raise ArgumentError, 'Port must be a number' unless port.to_i > 0 + + @hostname = hostname + @port = port.to_i + end + + # + # Returns true only if the file can be downloaded and is not zero-length. + # + def test(file) + target = Dir::Tmpname.make_tmpname('/tmp/', nil) + + return false unless fetch(file, target) + return false unless File.size?(target) + return true + ensure + FileUtils.rm_f(target) + end + + def fetch(file, target=nil) + # HPA's tftp client appears to have a 25s timeout that it is + # not possible to change on the command line. + return tftp("-m binary #{@hostname} #{@port} -c get #{file} #{target}") + end + + def tftp(args) + return system("tftp #{args}") == true + end + + end + + end + +end |