diff --git a/lib/fluent/config/types.rb b/lib/fluent/config/types.rb index 9c9ba89c8d..ff61a09ab5 100644 --- a/lib/fluent/config/types.rb +++ b/lib/fluent/config/types.rb @@ -199,6 +199,7 @@ def self.enum_value(val, opts = {}, name = nil) def self.hash_value(val, opts = {}, name = nil) return nil if val.nil? + val = Config.process_env_vars(val) param = if val.is_a?(String) val.start_with?('{') ? JSON.parse(val) : Hash[val.strip.split(/\s*,\s*/).map{|v| v.split(':', 2)}] @@ -226,6 +227,7 @@ def self.hash_value(val, opts = {}, name = nil) def self.array_value(val, opts = {}, name = nil) return nil if val.nil? + val = Config.process_env_vars(val) param = if val.is_a?(String) val.start_with?('[') ? JSON.parse(val) : val.strip.split(/\s*,\s*/) @@ -245,5 +247,16 @@ def self.array_value(val, opts = {}, name = nil) ARRAY_TYPE = Proc.new { |val, opts = {}, name = nil| Config.array_value(val, opts, name) } + + def self.process_env_vars(val) + pattern = /#\{ENV\[[^}]+\]\}/ + env_vars = val.scan(pattern) + env_vars.each do |env_var| + env_value = ENV[env_var[7..-4]] + raise ConfigError, "Environment variable #{env_var} not found" unless env_value + val.gsub!(env_var, env_value) + end + val + end end end