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