summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaku Ytti <saku@ytti.fi>2015-08-20 14:06:41 +0300
committerSaku Ytti <saku@ytti.fi>2015-08-20 14:06:41 +0300
commitbf93722e4ec00c3cdf6cfbe66820fec73e151d55 (patch)
tree13de9ff2cb8261a25bedebcf137e3d2b8c8897c4
parent19aef046c6ed5e75bcb339a5e503bc075def0ebe (diff)
Added support for Zyxel ZynOS
Model: SAM1316-22 STU-C ZyNOS version: V3.53(BVE.2)
-rw-r--r--README.md1
-rw-r--r--lib/oxidized/input/ftp.rb54
-rw-r--r--lib/oxidized/model/zynos.rb12
-rw-r--r--lib/oxidized/node.rb3
4 files changed, 70 insertions, 0 deletions
diff --git a/README.md b/README.md
index e5564ec..30acb60 100644
--- a/README.md
+++ b/README.md
@@ -71,6 +71,7 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacemen
* Mikrotik RouterOS
* Ubiquiti AirOS
* Palo Alto PAN-OS
+ * Zyxel ZynOS
# Installation
diff --git a/lib/oxidized/input/ftp.rb b/lib/oxidized/input/ftp.rb
new file mode 100644
index 0000000..ccbf5ef
--- /dev/null
+++ b/lib/oxidized/input/ftp.rb
@@ -0,0 +1,54 @@
+module Oxidized
+ require 'net/ftp'
+ require 'timeout'
+ require_relative 'cli'
+
+ class FTP < Input
+ RescueFail = {
+ :debug => [
+ #Net::SSH::Disconnect,
+ ],
+ :warn => [
+ #RuntimeError,
+ #Net::SSH::AuthenticationFailed,
+ ],
+ }
+ include Input::CLI
+
+ def connect node
+ @node = node
+ @node.model.cfg['ftp'].each { |cb| instance_exec(&cb) }
+ @log = File.open(CFG.input.debug?.to_s + '-ftp', 'w') if CFG.input.debug?
+ @ftp = Net::FTP.new @node.ip, @node.auth[:username], @node.auth[:password]
+ connected?
+ end
+
+ def connected?
+ @ftp and not @ftp.closed?
+ end
+
+ def cmd file
+ Log.debug "FTP: #{file} @ #{@node.name}"
+ @ftp.getbinaryfile file, nil
+ 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
+ @ftp.close
+ #rescue Errno::ECONNRESET, IOError
+ ensure
+ @log.close if CFG.input.debug?
+ end
+
+ end
+end
diff --git a/lib/oxidized/model/zynos.rb b/lib/oxidized/model/zynos.rb
new file mode 100644
index 0000000..49ac171
--- /dev/null
+++ b/lib/oxidized/model/zynos.rb
@@ -0,0 +1,12 @@
+class ZynOS < Oxidized::Model
+
+ # Used in Zyxel DSLAMs, such as SAM1316
+
+ comment '! '
+
+ cmd 'config-0'
+
+ cfg :ftp do
+ end
+
+end
diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb
index 253de53..d50317f 100644
--- a/lib/oxidized/node.rb
+++ b/lib/oxidized/node.rb
@@ -29,6 +29,9 @@ module Oxidized
def run
status, config = :fail, nil
@input.each do |input|
+ # don't try input if model is missing config block, we may need strong config to class_name map
+ cfg_name = input.to_s.split('::').last.downcase
+ next unless @model.cfg[cfg_name] and not @model.cfg[cfg_name].empty?
@model.input = input = input.new
if config=run_input(input)
status = :success