Normalize Config Support Mixin

Build Status

This gem can be included in any LogStash::Plugin, and will provide utilities methods that can be used by the plugins to extract and normalize configs.

Usage

  1. Add version ~>1.0 of this gem as a runtime dependency of your Logstash plugin's gemspec:

    Gem::Specification.new do |s|
      # ...
    
      s.add_runtime_dependency 'logstash-mixin-normalize_config_support', '~>1.0'
    end
  2. In your plugin code, require this library and include it into your plugin class that already inherits LogStash::Plugin:

    require 'logstash/plugin_mixins/normalize_config_support'
    
    class LogStash::Inputs::Foo < Logstash::Inputs::Base
      include LogStash::PluginMixins::NormalizeConfigSupport
    
      # ...
    end
  3. Use the provided normalize_config method to normalize a configuration and to produce a canonical value for it. It currently supports the following normalizers:

    • with_deprecated_mapping: Map one or more deprecated configs to the canonical config
    • with_deprecated_alias: Wholly-alias a deprecated config to the canonical config
    def register
      # ...
      @ssl_verification_mode = normalize_config(:ssl_verification_mode) do |normalize|
         normalize.with_deprecated_mapping(:ssl_verify_mode) do |ssl_verify_mode|
            case ssl_verify_mode
            when "none"       then "none"
            when "peer"       then "certificate"
            when "force_peer" then "full"
            else fail(LogStash::ConfigurationError, "Unsupported value #{ssl_verify_mode} for deprecated option `ssl_verify_mode`")
         end
      end
    
      @ssl_cipher_suites = normalize_config(:ssl_cipher_suites) do |normalize|
         normalize.with_deprecated_alias(:cipher_suites)
      end
    
      @ssl_supported_protocols = normalize_config(:ssl_supported_protocols) do |normalize|
         normalize.with_deprecated_mapping(:tls_min_version, :tls_max_version) do |tls_min, tls_max|
            TLS.get_supported(tls_min..tls_max).map(&:name)
         end
      end
    end

Development

This gem:

  • MUST NOT introduce additional runtime dependencies