Add Fluentd::Setting::Config#delete_element

Signed-off-by: Kenji Okimoto <okimoto@clear-code.com>
This commit is contained in:
Kenji Okimoto 2018-09-14 12:07:19 +09:00
parent 1657abf6eb
commit ef56a23d1d
No known key found for this signature in database
GPG Key ID: F9E3E329A5C5E4A1
2 changed files with 133 additions and 0 deletions

View File

@ -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

View File

@ -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, <<CONFIG.chomp)
<filter dummy>
@type stdout
</filter>
<match dummy>
@type stdout
</match>
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, <<CONFIG.chomp)
<source>
@type dummy
tag dummy
</source>
<match dummy>
@type stdout
</match>
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, <<CONFIG.chomp)
<source>
@type dummy
tag dummy
</source>
<filter dummy>
@type stdout
</filter>
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, <<CONFIG.chomp)
<source>
@type dummy
tag dummy1
@label @INPUT
</source>
<source>
@type dummy
tag dummy2
@label @INPUT
</source>
<label @MAIN>
<filter dummy1>
@type stdout
</filter>
<filter dummy2>
@type stdout
</filter>
<match dummy1>
@type stdout
</match>
<match dummy2>
@type stdout
</match>
</label>
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