class Jerakia::Datasource::Consul_kv

Public Instance Methods

lookup() click to toggle source

Entrypoint for Jerakia lookups starts here.

# File lib/jerakia/datasource/consul_kv.rb, line 51
def lookup
  
  Jerakia.log.debug("[datasource::console_kv] backend performing lookup for #{request.key}")
  paths = options[:searchpath].reject { |p| p.nil? }

  key = request.key
  namespace = request.namespace


  answer do |response|

    break if paths.empty?
    path = paths.shift.split('/').compact


    path << namespace
    path << key unless key.nil?

    diplomat_options = {
      :recurse => options[:recursive],
      :convert_to_hash => options[:to_hash],
      :dc => options[:datacenter],
    }

    begin
     key_path = path.flatten.join('/')
     Jerakia.log.debug("[datasource::consul_kv] Looking up #{key_path} with options #{diplomat_options}")
     result = Diplomat::Kv.get(key_path, diplomat_options)
    rescue Diplomat::KeyNotFound => e
      Jerakia.log.debug("NotFound encountered, skipping to next path entry")
      next
    rescue Faraday::ConnectionFailed => e
      raise Jerakia::Error, "Failed to connect to consul service: #{e.message}"
    end
    response.submit result
  end
end