From 15f838af3a509d62c8b13831f4058998b6f9448c Mon Sep 17 00:00:00 2001 From: Armin Date: Sat, 10 Jun 2017 19:18:24 +0200 Subject: [PATCH] #6696 validate evaluation result --- logstash-core/lib/logstash/config/mixin.rb | 5 +++++ logstash-core/spec/logstash/config/mixin_spec.rb | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/logstash-core/lib/logstash/config/mixin.rb b/logstash-core/lib/logstash/config/mixin.rb index b0c15839470..44ee6a0e8f5 100644 --- a/logstash-core/lib/logstash/config/mixin.rb +++ b/logstash-core/lib/logstash/config/mixin.rb @@ -143,6 +143,9 @@ def config_init(params) end # def config_init module DSL + + include LogStash::Util::EnvironmentVariables + attr_accessor :flags # If name is given, set the name and return it. @@ -388,6 +391,8 @@ def validate_value(value, validator) # (see LogStash::Inputs::File for example) result = nil + value = deep_replace(value) + if validator.nil? return true, value elsif validator.is_a?(Array) diff --git a/logstash-core/spec/logstash/config/mixin_spec.rb b/logstash-core/spec/logstash/config/mixin_spec.rb index d2b751fb052..189f4d508f3 100644 --- a/logstash-core/spec/logstash/config/mixin_spec.rb +++ b/logstash-core/spec/logstash/config/mixin_spec.rb @@ -369,11 +369,13 @@ def initialize(params) before do ENV["FunString"] = "fancy" ENV["FunBool"] = "true" + ENV["SERVER_LS_TEST_ADDRESS"] = "some.host.address.tld" end after do ENV.delete("FunString") ENV.delete("FunBool") + ENV.delete("SERVER_LS_TEST_ADDRESS") end subject do @@ -397,6 +399,17 @@ def initialize(params) expect(subject.nestedArray).to(be == { "level1" => [{ "key1" => "http://fancy:8080/blah.txt" }, { "key2" => "http://fancy:8080/foo.txt" }] }) expect(subject.deepHash).to(be == { "level1" => { "level2" => { "level3" => { "key1" => "http://fancy:8080/blah.txt" } } } }) end + + it "should validate settings after interpolating ENV variables" do + expect { + Class.new(LogStash::Filters::Base) do + include LogStash::Config::Mixin + config_name "test" + milestone 1 + config :server_address, :validate => :uri + end.new({"server_address" => "${SERVER_LS_TEST_ADDRESS}"}) + }.not_to raise_error + end end context "should support $ in values" do