class Hiera::Backend::Jerakia_backend

Public Class Methods

new(config = nil) click to toggle source
# File lib/hiera/backend/jerakia_backend.rb, line 8
def initialize(config = nil)
  require 'jerakia'
  @config = config || Hiera::Config[:jerakia] || {}
  @policy = @config[:policy] || 'default'
  @jerakia = ::Jerakia.new(@config)
  Jerakia.log.debug("[hiera] hiera backend loaded with policy #{@policy}")
end

Public Instance Methods

lookup(key, scope, _order_override, resolution_type) click to toggle source
# File lib/hiera/backend/jerakia_backend.rb, line 16
def lookup(key, scope, _order_override, resolution_type)
  return {} if key == 'lookup_options'
  lookup_type = :first
  merge_type = :none

  case resolution_type
  when :array
    lookup_type = :cascade
    merge_type = :array
  when :hash
    lookup_type = :cascade
    merge_type = :hash
  end

  namespace = []

  if key.include?('::')
    lookup_key = key.split('::')
    key = lookup_key.pop
    namespace = lookup_key
  end

  Jerakia.log.debug("[hiera] backend invoked for key #{key} using namespace #{namespace}")

  metadata = {}
  if scope.is_a?(Hash)
    metadata = MessagePack.unpack(scope.to_msgpack)
  else
    metadata = MessagePack.unpack(scope.real.to_hash.to_msgpack)
  end

  request = Jerakia::Request.new(
    :key         => key,
    :namespace   => namespace,
    :policy      => metadata['jerakia_policy'] || @policy,
    :lookup_type => lookup_type,
    :merge       => merge_type,
    :metadata    => metadata
  )

  answer = @jerakia.lookup(request)
  answer.payload
end