diff options
Diffstat (limited to 'lib/oxidized/source/csv.rb')
-rw-r--r-- | lib/oxidized/source/csv.rb | 89 |
1 files changed, 44 insertions, 45 deletions
diff --git a/lib/oxidized/source/csv.rb b/lib/oxidized/source/csv.rb index c1e310a..ae1c0a9 100644 --- a/lib/oxidized/source/csv.rb +++ b/lib/oxidized/source/csv.rb @@ -1,54 +1,53 @@ module Oxidized -class CSV < Source - def initialize - @cfg = Oxidized.config.source.csv - super - end - - def setup - if @cfg.empty? - Oxidized.asetus.user.source.csv.file = File.join(Config::Root, 'router.db') - Oxidized.asetus.user.source.csv.delimiter = /:/ - Oxidized.asetus.user.source.csv.map.name = 0 - Oxidized.asetus.user.source.csv.map.model = 1 - Oxidized.asetus.user.source.csv.gpg = false - Oxidized.asetus.save :user - raise NoConfig, 'no source csv config, edit ~/.config/oxidized/config' + class CSV < Source + def initialize + @cfg = Oxidized.config.source.csv + super end - require 'gpgme' if @cfg.gpg? - end - def load - nodes = [] - file = File.expand_path(@cfg.file) - file = if @cfg.gpg? - crypto = GPGME::Crypto.new password: @cfg.gpg_password - crypto.decrypt(file).to_s - else - open(file) - end - file.each_line do |line| - next if line.match(/^\s*#/) - data = line.chomp.split(@cfg.delimiter, -1) - next if data.empty? - # map node parameters - keys = {} - @cfg.map.each do |key, position| - keys[key.to_sym] = node_var_interpolate data[position] + def setup + if @cfg.empty? + Oxidized.asetus.user.source.csv.file = File.join(Config::Root, 'router.db') + Oxidized.asetus.user.source.csv.delimiter = /:/ + Oxidized.asetus.user.source.csv.map.name = 0 + Oxidized.asetus.user.source.csv.map.model = 1 + Oxidized.asetus.user.source.csv.gpg = false + Oxidized.asetus.save :user + raise NoConfig, 'no source csv config, edit ~/.config/oxidized/config' end - keys[:model] = map_model keys[:model] if keys.key? :model + require 'gpgme' if @cfg.gpg? + end - # map node specific vars - vars = {} - @cfg.vars_map.each do |key, position| - vars[key.to_sym] = node_var_interpolate data[position] - end - keys[:vars] = vars unless vars.empty? + def load + nodes = [] + file = File.expand_path(@cfg.file) + file = if @cfg.gpg? + crypto = GPGME::Crypto.new password: @cfg.gpg_password + file = crypto.decrypt(File.open(file)).to_s + else + open(file) + end + file.each_line do |line| + next if line.match(/^\s*#/) + data = line.chomp.split(@cfg.delimiter, -1) + next if data.empty? + # map node parameters + keys = {} + @cfg.map.each do |key, position| + keys[key.to_sym] = node_var_interpolate data[position] + end + keys[:model] = map_model keys[:model] if keys.has_key? :model - nodes << keys + # map node specific vars + vars = {} + @cfg.vars_map.each do |key, position| + vars[key.to_sym] = node_var_interpolate data[position] + end + keys[:vars] = vars unless vars.empty? + + nodes << keys + end + nodes end - nodes end - -end end |