From 9d258c9e17a1b200060424cdaccb0355f757f124 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Fri, 8 Aug 2014 09:38:25 +0300 Subject: refactor cfg as object - now default type is 'nil', which is collapsed to flat config via Outputs#to_cfg - if type is not 'nil' then name is automatically set if not set by model - if name and type is set, separate file is created - if name is not set, but type is set, outputs from type are collapsed as with 'nil' types This model: cmd 'show ip cef' do |out| out.type = 'poop' out.name = false out end cmd 'show process cpu' do |out| out.type = 'poop' out.name = 'my_cpu' out end cmd 'show memory statistics' do |out| out.type = 'poop' out.name = false out end cmd 'show ip bgp summary' do |out| out.type = 'poop' end Would produce git output: [ytti@ytti.fi ~/.config/oxidized]% ls poop bu.ip.fi bu.ip.fi--cpu bu.ip.fi--show_ip_bgp_summary [ytti@ytti.fi ~/.config/oxidized]% bu.ip.fi contains the collapsed stuff bu.ip.fi--cpu is manually named bu.ip.fi--show_ip_bgp_summary is automatically named --- lib/oxidized/model/model.rb | 2 +- lib/oxidized/model/outputs.rb | 4 ++-- lib/oxidized/output/file.rb | 4 ++-- lib/oxidized/output/git.rb | 3 +++ lib/oxidized/string.rb | 16 +++++----------- 5 files changed, 13 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/oxidized/model/model.rb b/lib/oxidized/model/model.rb index 3dd3f98..7258912 100644 --- a/lib/oxidized/model/model.rb +++ b/lib/oxidized/model/model.rb @@ -155,7 +155,7 @@ module Oxidized if output.class != Oxidized::String output = Oxidized::String.new output end - output.cmd = name + output.set_cmd(name) output end diff --git a/lib/oxidized/model/outputs.rb b/lib/oxidized/model/outputs.rb index 406f886..10015f8 100644 --- a/lib/oxidized/model/outputs.rb +++ b/lib/oxidized/model/outputs.rb @@ -3,7 +3,7 @@ module Oxidized class Outputs def to_cfg - type_to_str('cfg') + type_to_str(nil) end def type_to_str want_type @@ -23,7 +23,7 @@ module Oxidized end def types - @outputs.map { |out| out.type }.uniq - ['cfg'] + @outputs.map { |out| out.type }.uniq.compact end private diff --git a/lib/oxidized/output/file.rb b/lib/oxidized/output/file.rb index 2d08106..03c878a 100644 --- a/lib/oxidized/output/file.rb +++ b/lib/oxidized/output/file.rb @@ -14,14 +14,14 @@ class OxidizedFile < Output end end - def store node, data, opt={} + def store node, outputs, opt={} file = @cfg.directory if opt[:group] file = File.join File.dirname(file), opt[:group] end FileUtils.mkdir_p file file = File.join file, node - open(file, 'w') { |fh| fh.write data } + open(file, 'w') { |fh| fh.write outputs.to_cfg } end def fetch node, group diff --git a/lib/oxidized/output/git.rb b/lib/oxidized/output/git.rb index f87ab66..0391d5d 100644 --- a/lib/oxidized/output/git.rb +++ b/lib/oxidized/output/git.rb @@ -28,11 +28,14 @@ class Git < Output repo = @cfg.repo outputs.types.each do |type| + type_cfg = '' type_repo = File.join File.dirname(repo), type + '.git' outputs.type(type).each do |output| + (type_cfg << output; next) if not output.name type_file = file + '--' + output.name update type_repo, type_file, output end + update type_repo, file, type_cfg unless type_cfg.empty? end update repo, file, outputs.to_cfg diff --git a/lib/oxidized/string.rb b/lib/oxidized/string.rb index b17f896..d95bcae 100644 --- a/lib/oxidized/string.rb +++ b/lib/oxidized/string.rb @@ -1,7 +1,7 @@ module Oxidized # Used in models, contains convenience methods class String < String - attr_accessor :type, :cmd + attr_accessor :type, :cmd, :name # @return [Oxidized::String] copy of self with last line removed def cut_tail @@ -13,17 +13,11 @@ module Oxidized Oxidized::String.new each_line.to_a[1..-1].join end - # @return clean/filename version of cmd - def name - cmd.strip.gsub(/\s+/, '_') + # sets @cmd and @name unless @name is already set + def set_cmd command + @cmd = command + @name = @cmd.strip.gsub(/\s+/, '_') if @name == nil end - private - - def initialize arg - super - @type = 'cfg' - @cmd = 'n/a' - end end end -- cgit v1.2.1