module Kumonos::Envoy

Generate envoy configuration.

Constants

DEFAULT_HTTP_FILTERS
EnvoyConfig

Public Class Methods

generate(definition, cluster:, node:) click to toggle source
# File lib/kumonos/envoy.rb, line 9
def generate(definition, cluster:, node:)
  EnvoyConfig.build(definition, cluster: cluster, node: node).to_h
end

Public Instance Methods

to_h() click to toggle source
Calls superclass method
# File lib/kumonos/envoy.rb, line 46
def to_h
  h = super
  h.delete(:version)
  h.delete(:discovery_service)
  h.delete(:sds)
  h.delete(:statsd)
  h.delete(:listener)
  h.delete(:cluster)
  h.delete(:node)
  h.delete(:runtime)
  h[:admin] = admin.to_h
  h[:runtime] = runtime.to_h if runtime
  h[:static_resources] = {
    listeners: [listener.to_h],
    clusters: [discovery_service.cluster.to_h, sds.cluster.to_h]
  }
  h[:dynamic_resources] = {
    cds_config: {
      api_config_source: {
        cluster_names: [discovery_service.cluster.name],
        refresh_delay: {
          seconds: discovery_service.refresh_delay_ms / 1000.0
        }
      }
    },
    deprecated_v1: {
      sds_config: {
        api_config_source: {
          cluster_names: [sds.cluster.name],
          refresh_delay: {
            seconds: sds.refresh_delay_ms / 1000.0
          }
        }
      }
    }
  }

  if statsd
    statsd_address, statsd_port = statsd.split(':')
    h[:stats_sinks] = [
      {
        name: 'envoy.dog_statsd',
        config: {
          address: {
            socket_address: {
              protocol: 'UDP',
              address: statsd_address,
              port_value: Integer(statsd_port)
            }
          }
        }
      }
    ]
    h[:stats_config] = {
      use_all_default_tags: true,
      stats_tags: [
        { tag_name: 'service-cluster', fixed_value: cluster },
        { tag_name: 'service-node', fixed_value: node }
      ]
    }
  end

  h
end