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 | |
| parent | e33455736a49b95876b77552df9c130ad687c5fd (diff) | |
added a simple tftp utility
Diffstat (limited to 'lib')
| -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 | 
