summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--lib/oxidized/input/tftp.rb41
-rw-r--r--lib/oxidized/model/alvarion13
3 files changed, 57 insertions, 1 deletions
diff --git a/README.md b/README.md
index 3c8043f..4534727 100644
--- a/README.md
+++ b/README.md
@@ -50,6 +50,8 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacemen
* AOS7
* ISAM
* Wireless
+ * Alvarion
+ * BreezeACCESS
* Arista
* EOS
* Arris
@@ -747,7 +749,7 @@ The following objects exist in Oxidized.
## Input
* gets config from nodes
* must implement 'connect', 'get', 'cmd'
- * 'ssh' and 'telnet' implemented
+ * 'ssh', 'telnet, ftp, and tftp' implemented
## Output
* stores config
diff --git a/lib/oxidized/input/tftp.rb b/lib/oxidized/input/tftp.rb
new file mode 100644
index 0000000..78164d0
--- /dev/null
+++ b/lib/oxidized/input/tftp.rb
@@ -0,0 +1,41 @@
+module Oxidized
+ require 'stringio'
+ require_relative 'cli'
+
+ begin
+ require 'net/tftp'
+ rescue LoadError
+ raise OxidizedError, 'net/tftp not found: sudo gem install net-tftp'
+ end
+
+ class TFTP < Input
+
+ 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.debug "TFTP: #{file} @ #{@node.name}"
+ config = StringIO.new
+ @tftp.getbinary file, config
+ config.rewind
+ config.read
+ end
+
+ private
+
+ def disconnect
+ # TFTP uses UDP, there is no connection to close
+ ensure
+ @log.close if Oxidized.config.input.debug?
+ end
+
+ end
+end
diff --git a/lib/oxidized/model/alvarion b/lib/oxidized/model/alvarion
new file mode 100644
index 0000000..3c762de
--- /dev/null
+++ b/lib/oxidized/model/alvarion
@@ -0,0 +1,13 @@
+class Alvarion < Oxidized::Model
+
+ # Used in Alvarion wisp equipment
+
+ # Run this command as an instance of Model so we can access node
+ pre do
+ cmd "#{node.auth[:password]}.cfg"
+ end
+
+
+ cfg :tftp {}
+
+end