class Hiera::Backend::Dop_backend

Public Class Methods

new() click to toggle source
# File lib/hiera/backend/dop_backend.rb, line 10
def initialize
  Hiera.debug('Hiera DOP backend starting')
  begin
    require 'dop_common'
  rescue
    require 'rubygems'
    require 'dop_common'
  end

  if Config[:dop].kind_of?(Hash)
    @plan_store_dir ||= Config[:dop][:plan_store_dir]
  end
  # this is the fixed default path since the puppet master runs with the
  # puppet user but wants to read from the default dop cache and not from
  # the user specific one.
  @plan_store_dir ||= '/var/lib/dop/cache/'

  @plan_store = DopCommon::PlanStore.new(@plan_store_dir)
  @plan_cache = DopCommon::PlanCache.new(@plan_store)
  Hiera.debug('DOP Plan Cache Loaded')
end

Public Instance Methods

lookup(key, scope, order_override, resolution_type, context = {}) click to toggle source
# File lib/hiera/backend/dop_backend.rb, line 32
def lookup(key, scope, order_override, resolution_type, context = {})
  node_name = scope['::clientcert']
  plan = @plan_cache.plan_by_node(node_name)

  if plan.nil?
    Hiera.debug("Node #{node_name} not found in any plan")
    #throw(:no_such_key)
    return nil
  else
    Hiera.debug("Node #{node_name} found in plan #{plan.name}")
    plan_lookup(plan, key, scope, order_override, resolution_type, context)
  end
end
plan_lookup(plan, key, scope, order_override, resolution_type, context) click to toggle source
# File lib/hiera/backend/dop_backend.rb, line 46
def plan_lookup(plan, key, scope, order_override, resolution_type, context)
  answer = nil
  found = false
  extra_data = {}
  context[:order_override] = order_override
  Hiera::Backend.datasources(scope, order_override) do |source|
    Hiera.debug("Looking for data source #{source}")
    begin
      data = plan.configuration.lookup(source, key, scope)
      if Hiera::Backend.method(:parse_answer).arity == -4
        new_answer = Hiera::Backend.parse_answer(data, scope, extra_data, context)
      else
        new_answer = Hiera::Backend.parse_answer(data, scope, extra_data)
      end
      found = true

      case resolution_type.is_a?(Hash) ? :hash : resolution_type
      when :array then answer = merge_array(answer, new_answer)
      when :hash  then answer = merge_hash(answer, new_answer, resolution_type)
      else
        answer = new_answer
        break
      end

    rescue DopCommon::ConfigurationValueNotFound
      next
    end
  end
  #throw(:no_such_key) unless found
  return answer
end

Private Instance Methods

merge_array(answer, new_answer) click to toggle source
# File lib/hiera/backend/dop_backend.rb, line 80
def merge_array(answer, new_answer)
  answer ||= []
  case new_answer
  when Array then answer += new_answer
  when String then answer << new_answer
  else
    raise "Hiera type mismatch: expected Array or String and got #{new_answer.class}"
  end
  return answer
end
merge_hash(answer, new_answer, resolution_type) click to toggle source
# File lib/hiera/backend/dop_backend.rb, line 91
def merge_hash(answer, new_answer, resolution_type)
  answer ||= {}
  answer = Hiera::Backend.merge_answer(new_answer, answer, resolution_type)
  unless new_answer.kind_of?(Hash)
    raise "Hiera type mismatch: expected Hash and got #{new_answer.class}"
  end
  return answer
end