class ConsulDataSource

Public Instance Methods

fetch_all_keys(path) click to toggle source
# File lib/tiller/data/consul.rb, line 62
def fetch_all_keys(path)
  keys = Diplomat::Kv.get(path, { keys: true, :dc => @consul_config['dc'] }, :return)
  all_keys = Hash.new
  if keys.is_a? Array
    keys.each do |k|
      Tiller::log.debug("#{self} : Fetching key #{k}")
      k_basename = k[path.length..-1] # remove leading path
      v = Diplomat::Kv.get(k, { nil_values: true, :dc => @consul_config['dc'] })
      all_keys.deep_merge!(k_basename.split('/').reverse.inject(v) { |a, n| { n => a } })
    end
    all_keys
  else
    {}
  end
end
global_values() click to toggle source
# File lib/tiller/data/consul.rb, line 10
def global_values
  return {} unless Tiller::config.has_key?('consul')

  # Fetch globals
  path = interpolate("#{@consul_config['values']['global']}")
  Tiller::log.debug("#{self} : Fetching globals from #{path}")
  globals = fetch_all_keys(path)

  # Do we have per-env globals ? If so, merge them
  path = interpolate("#{@consul_config['values']['per_env']}")
  Tiller::log.debug("#{self} : Fetching per-environment globals from #{path}")
  globals.deep_merge!(fetch_all_keys(path))

  # Do we want to register services in consul_services hash ?
  if @consul_config['register_services']
    Tiller::log.debug("#{self} : Registering Consul services")
    globals['consul_services'] = {}
    services = Diplomat::Service.get_all({ :dc => @consul_config['dc'] })
    services.marshal_dump.each do |service, _data|
      Tiller::log.debug("#{self} : Fetching Consul service information for #{service}")
      service_data = Diplomat::Service.get(service, :all, { :dc => @consul_config['dc']})
      globals['consul_services'].merge!( { "#{service}" => service_data })
    end
  end

  # Do we want to register nodes in consul_nodes hash ?
  if @consul_config['register_nodes']
    Tiller::log.debug("#{self} : Registering Consul nodes")
    globals['consul_nodes'] = {}
    nodes = Diplomat::Node.get_all
    nodes.each do |n|
      globals['consul_nodes'].merge!({ n.Node => n.Address })
    end
  end
  globals
end
target_values(template_name) click to toggle source
# File lib/tiller/data/consul.rb, line 54
def target_values(template_name)
  return {} unless Tiller::config.has_key?('consul')
  path = interpolate("#{@consul_config['values']['target']}", template_name)
  Tiller::log.debug("#{self} : Fetching template target values from #{path}")
  fetch_all_keys(path)
end
values(template_name) click to toggle source
# File lib/tiller/data/consul.rb, line 47
def values(template_name)
  return {} unless Tiller::config.has_key?('consul')
  path = interpolate("#{@consul_config['values']['template']}", template_name)
  Tiller::log.debug("#{self} : Fetching template values from #{path}")
  fetch_all_keys(path)
end