From ef56a23d1dd40377854f6fafff9b18b10fcd5c59 Mon Sep 17 00:00:00 2001 From: Kenji Okimoto Date: Fri, 14 Sep 2018 12:07:19 +0900 Subject: [PATCH] Add Fluentd::Setting::Config#delete_element Signed-off-by: Kenji Okimoto --- app/models/fluentd/setting/config.rb | 35 ++++++++ test/models/fluentd/setting/config_test.rb | 98 ++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 test/models/fluentd/setting/config_test.rb diff --git a/app/models/fluentd/setting/config.rb b/app/models/fluentd/setting/config.rb index b01089d..4e3b824 100644 --- a/app/models/fluentd/setting/config.rb +++ b/app/models/fluentd/setting/config.rb @@ -63,6 +63,41 @@ class Fluentd hash end + def delete_element(name, arg, element) + if name == "label" + label_section = fl_config.elements(name: name, arg: arg).first + original_size = label_section.elements.size + remaining_elements = label_section.elements.reject do |e| + element == e + end + if remaining_elements.empty? + remaining_elements = fl_config.elements.reject do |e| + label_section == e + end + fl_config.elements = remaining_elements + return element + else + label_section.elements = remaining_elements + if original_size == label_section.elements.size + return nil + else + return element + end + end + else + original_size = fl_config.elements.size + remaining_elements = fl_config.elements.reject do |e| + element == e + end + fl_config.elements = remaining_elements + if original_size == fl_config.elements.size + return nil + else + return element + end + end + end + def write_to_file return unless Fluentd.instance Fluentd.instance.agent.config_write formatted diff --git a/test/models/fluentd/setting/config_test.rb b/test/models/fluentd/setting/config_test.rb new file mode 100644 index 0000000..d521f3c --- /dev/null +++ b/test/models/fluentd/setting/config_test.rb @@ -0,0 +1,98 @@ +require "test_helper" + +class FluentdConfigTest < ActiveSupport::TestCase + def create_config(fixture_name) + ::Fluentd::Setting::Config.new(fixture_path(fixture_name)) + end + + sub_test_case "#delete_element" do + test "delete a source" do + config = create_config("config/simple.conf") + element = config.elements(name: "source").first + config.delete_element("source", nil, element) + assert_equal(config.formatted.strip, < + @type stdout + + + + @type stdout + +CONFIG + end + + test "delete a filter" do + config = create_config("config/simple.conf") + element = config.elements(name: "filter").first + config.delete_element("filter", nil, element) + assert_equal(config.formatted.strip, < + @type dummy + tag dummy + + + + @type stdout + +CONFIG + end + + test "delete a match" do + config = create_config("config/simple.conf") + element = config.elements(name: "match").first + config.delete_element("match", nil, element) + assert_equal(config.formatted.strip, < + @type dummy + tag dummy + + + + @type stdout + +CONFIG + end + + test "delete all elements under the label" do + config = create_config("config/multi-label.conf") + input = config.elements(name: "label", arg: "@INPUT").first + input.elements.each do |element| + config.delete_element("label", "@INPUT", element) + end + assert_equal(config.formatted.strip, < + @type dummy + tag dummy1 + @label @INPUT + + + + @type dummy + tag dummy2 + @label @INPUT + + + +CONFIG + end + + test "cannot delete specified element" do + config = create_config("config/simple.conf") + element = ::Fluent::Config::Element.new("source", nil, { :@type => "dummy", :tag => "dummy" }, []) + assert_nil(config.delete_element("source", nil, element)) + end + end +end