summaryrefslogtreecommitdiff
path: root/lib/custodian/util/tftp.rb
diff options
context:
space:
mode:
authorJames F. Carter <james.carter@bytemark.co.uk>2016-04-21 13:14:42 +0100
committerJames F. Carter <james.carter@bytemark.co.uk>2016-04-21 13:14:42 +0100
commit0197e6c3e33ae5870436107cdb63fe56f9f45484 (patch)
treef8bf368e70df92a25c9a1bfae3f3840489b2f391 /lib/custodian/util/tftp.rb
parente33455736a49b95876b77552df9c130ad687c5fd (diff)
added a simple tftp utility
Diffstat (limited to 'lib/custodian/util/tftp.rb')
-rw-r--r--lib/custodian/util/tftp.rb52
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