From 9d217025fac3e335c308f02e7377e14ccfdc0e66 Mon Sep 17 00:00:00 2001
From: Saku Ytti <saku@ytti.fi>
Date: Wed, 17 Apr 2013 17:48:50 +0300
Subject: Initial commit

Silly for shit-and-giggles attempt at rancid
---
 lib/oxidized/source/csv.rb    | 37 ++++++++++++++++++++++++++++++++++
 lib/oxidized/source/source.rb | 15 ++++++++++++++
 lib/oxidized/source/sql.rb    | 46 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 98 insertions(+)
 create mode 100644 lib/oxidized/source/csv.rb
 create mode 100644 lib/oxidized/source/source.rb
 create mode 100644 lib/oxidized/source/sql.rb

(limited to 'lib/oxidized/source')

diff --git a/lib/oxidized/source/csv.rb b/lib/oxidized/source/csv.rb
new file mode 100644
index 0000000..6b08b18
--- /dev/null
+++ b/lib/oxidized/source/csv.rb
@@ -0,0 +1,37 @@
+module Oxidized
+class CSV < Source
+  def initialize
+    @cfg = CFG.source[:csv]
+    super
+  end
+
+  def setup
+    if not @cfg
+      CFG.source[:csv] = {
+        :file      => File.join(Config::Root, 'router.db'),
+        :delimiter => /:/,
+        :map       => {
+          :name  => 0,
+          :model => 1,
+        }
+      }
+    end
+    CFG.save
+  end
+
+  def load
+    nodes = []
+    open(@cfg[:file]).each_line do |line|
+      data  = line.chomp.split @cfg[:delimiter]
+      keys = {}
+      @cfg[:map].each do |key, position|
+        keys[key] = data[position]
+      end
+      keys[:model] = map_model keys[:model] if keys.key? :model
+      nodes << keys
+    end
+    nodes
+  end
+
+end
+end
diff --git a/lib/oxidized/source/source.rb b/lib/oxidized/source/source.rb
new file mode 100644
index 0000000..f5976a0
--- /dev/null
+++ b/lib/oxidized/source/source.rb
@@ -0,0 +1,15 @@
+module Oxidized
+  class Source
+    class << self
+      def inherited klass
+        Oxidized.mgr.loader = { :class => klass }
+      end
+    end
+    def initialize
+      @map = (CFG.model_map or {})
+    end
+    def map_model model
+      @map.key?(model) ? @map[model] : model
+    end
+  end
+end
diff --git a/lib/oxidized/source/sql.rb b/lib/oxidized/source/sql.rb
new file mode 100644
index 0000000..f7e6510
--- /dev/null
+++ b/lib/oxidized/source/sql.rb
@@ -0,0 +1,46 @@
+module Oxidized
+class SQL < Source
+  require 'sequel'
+
+  def initialize
+    super
+    @cfg = CFG.source[:sql]
+  end
+
+  def setup
+    if not @cfg
+      CFG.source[:sql] = {
+        :adapter => 'sqlite',
+        :file    => File.join(Config::Root, 'sqlite.db'),
+        :table   => 'devices',
+        :map     => {
+          :name      => 'name',
+          :model     => 'rancid',
+        }
+      }
+    end
+    CFG.save
+  end
+
+  def load
+    nodes = []
+    case @cfg[:adapter]
+    when 'sqlite'
+      require 'sqlite3'
+      Sequel.sqlite @cfg[:file]
+    end
+    klass = Class.new(Sequel::Model @cfg[:table].to_sym)
+    SQL.send :remove_const, :Nodes if SQL.const_defined? :Nodes
+    SQL.const_set :Nodes, klass
+    @cfg[:map].each { |new,old| Nodes.class_eval "alias #{new.to_sym} #{old.to_sym}" }
+    Nodes.each do |node|
+      keys = {}
+      @cfg[:map].each { |key, _| keys[key] = node.send(key.to_sym) }
+      keys[:model] = map_model keys[:model] if keys.key? :model
+      nodes << keys
+    end
+    nodes
+  end
+
+end
+end
-- 
cgit v1.2.3