Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated source files to avoid namespace duplication #3270

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/oxidized/manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class << self
def load(dir, file)
require File.join dir, file + '.rb'
klass = nil
[Oxidized, Object].each do |mod|
[Oxidized, Source, Object].each do |mod|
klass = mod.constants.find { |const| const.to_s.casecmp(file).zero? }
klass ||= mod.constants.find { |const| const.to_s.downcase == 'oxidized' + file.downcase }
klass = mod.const_get klass if klass
Expand Down
89 changes: 45 additions & 44 deletions lib/oxidized/source/csv.rb
Original file line number Diff line number Diff line change
@@ -1,54 +1,55 @@
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 #{Oxidized::Config.configfile}"
module Source
class CSV < Source
def initialize
@cfg = Oxidized.config.source.csv
super
end
require 'gpgme' if @cfg.gpg?

# map.name is mandatory
return if @cfg.map.has_key?('name')

raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
end

def load(_node_want = nil)
nodes = []
open_file.each_line do |line|
next if line =~ /^\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 #{Oxidized::Config.configfile}"
end
keys[:model] = map_model keys[:model] if keys.has_key? :model
keys[:group] = map_group keys[:group] if keys.has_key? :group
require 'gpgme' if @cfg.gpg?

# 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?
# map.name is mandatory
return if @cfg.map.has_key?('name')
raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
end

nodes << keys
def load(_node_want = nil)
nodes = []
open_file.each_line do |line|
next if line =~ /^\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
keys[:group] = map_group keys[:group] if keys.has_key? :group

# 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
128 changes: 65 additions & 63 deletions lib/oxidized/source/http.rb
Original file line number Diff line number Diff line change
@@ -1,82 +1,84 @@
module Oxidized
require "oxidized/source/jsonfile"
class HTTP < JSONFile
def initialize
super
@cfg = Oxidized.config.source.http
end

def setup
Oxidized.setup_logger
if @cfg.empty?
Oxidized.asetus.user.source.http.url = 'https://url/api'
Oxidized.asetus.user.source.http.map.name = 'name'
Oxidized.asetus.user.source.http.map.model = 'model'
Oxidized.asetus.save :user

raise NoConfig, "No source http config, edit #{Oxidized::Config.configfile}"
module Source
require "oxidized/source/jsonfile"
class HTTP < JSONFile
def initialize
super
@cfg = Oxidized.config.source.http
end

# check for mandatory attributes
if !@cfg.has_key?('url')
raise InvalidConfig, "url is a mandatory http source attribute, edit #{Oxidized::Config.configfile}"
elsif !@cfg.map.has_key?('name')
raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
def setup
Oxidized.setup_logger
if @cfg.empty?
Oxidized.asetus.user.source.http.url = 'https://url/api'
Oxidized.asetus.user.source.http.map.name = 'name'
Oxidized.asetus.user.source.http.map.model = 'model'
Oxidized.asetus.save :user

raise NoConfig, "No source http config, edit #{Oxidized::Config.configfile}"
end

# check for mandatory attributes
if !@cfg.has_key?('url')
raise InvalidConfig, "url is a mandatory http source attribute, edit #{Oxidized::Config.configfile}"
elsif !@cfg.map.has_key?('name')
raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
end
end
end

require "net/http"
require "net/https"
require "uri"
require "json"
require "net/http"
require "net/https"
require "uri"
require "json"

def load(node_want = nil)
uri = URI.parse(@cfg.url)
data = JSON.parse(read_http(uri, node_want))
node_data = data
node_data = string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
node_data = pagination(data, node_want) if @cfg.pagination?
def load(node_want = nil)
uri = URI.parse(@cfg.url)
data = JSON.parse(read_http(uri, node_want))
node_data = data
node_data = string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
node_data = pagination(data, node_want) if @cfg.pagination?

transform_json(node_data)
end
transform_json(node_data)
end

private
private

def pagination(data, node_want)
node_data = []
raise Oxidized::OxidizedError, "if using pagination, 'pagination_key_name' setting must be set" unless @cfg.pagination_key_name?
def pagination(data, node_want)
node_data = []
raise Oxidized::OxidizedError, "if using pagination, 'pagination_key_name' setting must be set" unless @cfg.pagination_key_name?

next_key = @cfg.pagination_key_name
loop do
node_data += string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
break if data[next_key].nil?
next_key = @cfg.pagination_key_name
loop do
node_data += string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
break if data[next_key].nil?

new_uri = URI.parse(data[next_key]) if data.has_key?(next_key)
data = JSON.parse(read_http(new_uri, node_want))
node_data += string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
new_uri = URI.parse(data[next_key]) if data.has_key?(next_key)
data = JSON.parse(read_http(new_uri, node_want))
node_data += string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?
end
node_data
end
node_data
end

def read_http(uri, node_want)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @cfg.secure
def read_http(uri, node_want)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @cfg.secure

# Add read_timeout to handle case of big list of nodes (default value is 60 seconds)
http.read_timeout = Integer(@cfg.read_timeout) if @cfg.has_key? "read_timeout"
# Add read_timeout to handle case of big list of nodes (default value is 60 seconds)
http.read_timeout = Integer(@cfg.read_timeout) if @cfg.has_key? "read_timeout"

# map headers
headers = {}
@cfg.headers.each do |header, value|
headers[header] = value
end
# map headers
headers = {}
@cfg.headers.each do |header, value|
headers[header] = value
end

req_uri = uri.request_uri
req_uri = "#{req_uri}/#{node_want}" if node_want
request = Net::HTTP::Get.new(req_uri, headers)
request.basic_auth(@cfg.user, @cfg.pass) if @cfg.user? && @cfg.pass?
http.request(request).body
req_uri = uri.request_uri
req_uri = "#{req_uri}/#{node_want}" if node_want
request = Net::HTTP::Get.new(req_uri, headers)
request.basic_auth(@cfg.user, @cfg.pass) if @cfg.user? && @cfg.pass?
http.request(request).body
end
end
end
end
99 changes: 50 additions & 49 deletions lib/oxidized/source/jsonfile.rb
Original file line number Diff line number Diff line change
@@ -1,61 +1,62 @@
module Oxidized
class JSONFile < Source
require "json"
def initialize
@cfg = Oxidized.config.source.jsonfile
super
end

def setup
if @cfg.empty?
Oxidized.asetus.user.source.jsonfile.file = File.join(Oxidized::Config::ROOT,
'router.json')
Oxidized.asetus.user.source.jsonfile.map.name = "name"
Oxidized.asetus.user.source.jsonfile.map.model = "model"
Oxidized.asetus.user.source.jsonfile.gpg = false
Oxidized.asetus.save :user
raise NoConfig, "No source json config, edit #{Oxidized::Config.configfile}"
module Source
class JSONFile < Source
require "json"
def initialize
@cfg = Oxidized.config.source.jsonfile
super
end
require 'gpgme' if @cfg.gpg?

# map.name is mandatory
return if @cfg.map.has_key?('name')

raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
end

def load(*)
data = JSON.parse(open_file.read)
data = string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?

transform_json(data)
end
def setup
if @cfg.empty?
Oxidized.asetus.user.source.jsonfile.file = File.join(Oxidized::Config::ROOT,
'router.json')
Oxidized.asetus.user.source.jsonfile.map.name = "name"
Oxidized.asetus.user.source.jsonfile.map.model = "model"
Oxidized.asetus.user.source.jsonfile.gpg = false
Oxidized.asetus.save :user
raise NoConfig, "No source json config, edit #{Oxidized::Config.configfile}"
end
require 'gpgme' if @cfg.gpg?

private
# map.name is mandatory
return if @cfg.map.has_key?('name')
raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
end

def transform_json(data)
nodes = []
data.each do |node|
next if node.empty?
def load(*)
data = JSON.parse(open_file.read)
data = string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?

# map node parameters
keys = {}
@cfg.map.each do |key, want_position|
keys[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
end
keys[:model] = map_model keys[:model] if keys.has_key? :model
keys[:group] = map_group keys[:group] if keys.has_key? :group
transform_json(data)
end

# map node specific vars
vars = {}
@cfg.vars_map.each do |key, want_position|
vars[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
private

def transform_json(data)
nodes = []
data.each do |node|
next if node.empty?

# map node parameters
keys = {}
@cfg.map.each do |key, want_position|
keys[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
end
keys[:model] = map_model keys[:model] if keys.has_key? :model
keys[:group] = map_group keys[:group] if keys.has_key? :group

# map node specific vars
vars = {}
@cfg.vars_map.each do |key, want_position|
vars[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
end
keys[:vars] = vars unless vars.empty?

nodes << keys
end
keys[:vars] = vars unless vars.empty?

nodes << keys
nodes
end
nodes
end
end
end
Loading
Loading