From e638e7c9685d375afbfba2949943da1c542dae53 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Wed, 28 Sep 2016 16:14:35 +0300 Subject: interpolate node variable values Empty value was variably considered "" or nil, now it will always be "" string. Now "nil", "false", "true" strings are converted to their respective types nil, false and true. This also means we cannot have verbatim strings by that name, like if your password was "false", you're shit out of luck. If this is the case, we can add some __false__ hack or consider other similar solutions. Fixes #500 Fixes #534 May break stuff with ""/nil changing now, but as it was not consistent to begin with, I find it acceptable. Users now may need to manually enter nil in some fields to regain old behaviour. --- lib/oxidized/source/csv.rb | 8 +++++--- lib/oxidized/source/http.rb | 6 ++++-- lib/oxidized/source/source.rb | 12 ++++++++++++ lib/oxidized/source/sql.rb | 4 +++- 4 files changed, 24 insertions(+), 6 deletions(-) (limited to 'lib/oxidized/source') diff --git a/lib/oxidized/source/csv.rb b/lib/oxidized/source/csv.rb index a0ce848..be5c4a6 100644 --- a/lib/oxidized/source/csv.rb +++ b/lib/oxidized/source/csv.rb @@ -20,7 +20,7 @@ class CSV < Source nodes = [] open(File.expand_path @cfg.file).each_line do |line| next if line.match(/^\s*#/) - data = line.chomp.split @cfg.delimiter + data = line.chomp.split(@cfg.delimiter, -1) next if data.empty? # map node parameters keys = {} @@ -29,9 +29,11 @@ class CSV < Source end keys[:model] = map_model keys[:model] if keys.key? :model - # map node specific vars, empty value is considered as nil + # map node specific vars vars = {} - @cfg.vars_map.each { |key, position| vars[key.to_sym] = data[position].to_s.empty? ? nil : data[position] } + @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 diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb index 93361a2..38387ad 100644 --- a/lib/oxidized/source/http.rb +++ b/lib/oxidized/source/http.rb @@ -43,9 +43,11 @@ class HTTP < Source end keys[:model] = map_model keys[:model] if keys.key? :model - # map node specific vars, empty value is considered as nil + # map node specific vars vars = {} - @cfg.vars_map.each { |key, position| vars[key.to_sym] = line[position].to_s.empty? ? nil : line[position] } + @cfg.vars_map.each do |key, position| + vars[key.to_sym] = node_var_interpolate line[position] + end keys[:vars] = vars unless vars.empty? nodes << keys diff --git a/lib/oxidized/source/source.rb b/lib/oxidized/source/source.rb index 7862dd1..9b8bc94 100644 --- a/lib/oxidized/source/source.rb +++ b/lib/oxidized/source/source.rb @@ -1,11 +1,23 @@ module Oxidized class Source class NoConfig < OxidizedError; end + def initialize @map = (Oxidized.config.model_map or {}) end + def map_model model @map.has_key?(model) ? @map[model] : model end + + def node_var_interpolate var + case var + when "nil" then nil + when "false" then false + when "true" then true + else var + end + end + end end diff --git a/lib/oxidized/source/sql.rb b/lib/oxidized/source/sql.rb index fc1caa8..ba85447 100644 --- a/lib/oxidized/source/sql.rb +++ b/lib/oxidized/source/sql.rb @@ -31,7 +31,9 @@ class SQL < Source # map node specific vars vars = {} - @cfg.vars_map.each { |key, sql_column| vars[key.to_sym] = node[sql_column.to_sym] } + @cfg.vars_map.each do |key, sql_column| + vars[key.to_sym] = node_var_interpolate node[sql_column.to_sym] + end keys[:vars] = vars unless vars.empty? nodes << keys -- cgit v1.2.3 From 6612535aa3378b99f836b41e675bf8f92a1159e7 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Wed, 12 Oct 2016 21:55:38 +0300 Subject: Interpolate also node variables, not just vars map Fixes #583 --- lib/oxidized/source/csv.rb | 2 +- lib/oxidized/source/http.rb | 2 +- lib/oxidized/source/sql.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/oxidized/source') diff --git a/lib/oxidized/source/csv.rb b/lib/oxidized/source/csv.rb index be5c4a6..d498e0b 100644 --- a/lib/oxidized/source/csv.rb +++ b/lib/oxidized/source/csv.rb @@ -25,7 +25,7 @@ class CSV < Source # map node parameters keys = {} @cfg.map.each do |key, position| - keys[key.to_sym] = data[position] + keys[key.to_sym] = node_var_interpolate data[position] end keys[:model] = map_model keys[:model] if keys.key? :model diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb index 38387ad..dc1c0b7 100644 --- a/lib/oxidized/source/http.rb +++ b/lib/oxidized/source/http.rb @@ -39,7 +39,7 @@ class HTTP < Source # map node parameters keys = {} @cfg.map.each do |key, position| - keys[key.to_sym] = line[position] + keys[key.to_sym] = node_var_interpolate line[position] end keys[:model] = map_model keys[:model] if keys.key? :model diff --git a/lib/oxidized/source/sql.rb b/lib/oxidized/source/sql.rb index ba85447..13fc39b 100644 --- a/lib/oxidized/source/sql.rb +++ b/lib/oxidized/source/sql.rb @@ -26,7 +26,7 @@ class SQL < Source query.each do |node| # map node parameters keys = {} - @cfg.map.each { |key, sql_column| keys[key.to_sym] = node[sql_column.to_sym] } + @cfg.map.each { |key, sql_column| keys[key.to_sym] = node_var_interpolate node[sql_column.to_sym] } keys[:model] = map_model keys[:model] if keys.key? :model # map node specific vars -- cgit v1.2.3 From 59e82bba2befb6ef5049ea9ae4e876327f3da158 Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Sat, 19 Nov 2016 14:16:20 +0000 Subject: Added option to disable ssl verification checks for http source --- README.md | 11 +++++++++++ lib/oxidized/source/http.rb | 1 + 2 files changed, 12 insertions(+) (limited to 'lib/oxidized/source') diff --git a/README.md b/README.md index 9ca6854..a1aee03 100644 --- a/README.md +++ b/README.md @@ -506,6 +506,17 @@ source: X-Auth-Token: 'somerandomstring' ``` +You can also pass `no_check_certificate = true` if you want to disable ssl certificate verification: + +``` +source: + default: http + http: + url: https://url/api + scheme: https + no_check_certificate: true +``` + ### Output: File Parent directory needs to be created manually, one file per device, with most recent running config. diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb index dc1c0b7..6f16aee 100644 --- a/lib/oxidized/source/http.rb +++ b/lib/oxidized/source/http.rb @@ -20,6 +20,7 @@ class HTTP < Source uri = URI.parse(@cfg.url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' + http.verify_mode = OpenSSL::SSL::VERIFY_NONE if uri.no_check_certificate == true # map headers headers = {} -- cgit v1.2.3 From 44574426d076c15f67ee9738b1c8c86d71910cce Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Sat, 19 Nov 2016 15:56:52 +0000 Subject: Updated config options --- README.md | 4 ++-- lib/oxidized/source/http.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/oxidized/source') diff --git a/README.md b/README.md index a1aee03..ea70c47 100644 --- a/README.md +++ b/README.md @@ -506,7 +506,7 @@ source: X-Auth-Token: 'somerandomstring' ``` -You can also pass `no_check_certificate = true` if you want to disable ssl certificate verification: +You can also pass `secure: false` if you want to disable ssl certificate verification: ``` source: @@ -514,7 +514,7 @@ source: http: url: https://url/api scheme: https - no_check_certificate: true + secure: false ``` ### Output: File diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb index 6f16aee..4fd388b 100644 --- a/lib/oxidized/source/http.rb +++ b/lib/oxidized/source/http.rb @@ -20,7 +20,7 @@ class HTTP < Source uri = URI.parse(@cfg.url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' - http.verify_mode = OpenSSL::SSL::VERIFY_NONE if uri.no_check_certificate == true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @cfg.secure # map headers headers = {} -- cgit v1.2.3