Class: Hiera::Backend::Json_backend

### Home Classes Methods

### In Files

- lib/hiera/backend/json_backend.rb

### Parent

Object

### Methods

- ::new
- #lookup

### Class/Module Index

Quicksearch

- Hiera
- Hiera::Backend
- Hiera::Backend::Json_backend
- Hiera::Backend::Yaml_backend
- Hiera::Config
- Hiera::Console_logger
- Hiera::FallbackLogger
- Hiera::Filecache
- Hiera::Noop_logger
- Hiera::Puppet_logger
- Hiera::RecursiveLookup
- Hiera::Util

No matching classes.

# Hiera::Backend::Json_backend

### Public Class Methods

new(cache=nil) click to toggle source

    # File lib/hiera/backend/json_backend.rb, line 4
    def initialize(cache=nil)
      require 'json'

      Hiera.debug("Hiera JSON backend starting")

      @cache = cache || Filecache.new
    end

### Public Instance Methods

lookup(key, scope, order_override, resolution_type) click to toggle source

    # File lib/hiera/backend/json_backend.rb, line 12
    def lookup(key, scope, order_override, resolution_type)
      answer = nil

      Hiera.debug("Looking up #{key} in JSON backend")

      Backend.datasources(scope, order_override) do |source|
        Hiera.debug("Looking for data source #{source}")

        jsonfile = Backend.datafile(:json, scope, source, "json") || next

        next unless File.exist?(jsonfile)

        data = @cache.read(jsonfile, Hash, {}) do |data|
          JSON.parse(data)
        end

        next if data.empty?
        next unless data.include?(key)

        # for array resolution we just append to the array whatever
        # we find, we then goes onto the next file and keep adding to
        # the array
        #
        # for priority searches we break after the first found data item
        new_answer = Backend.parse_answer(data[key], scope)
        case resolution_type
        when :array
          raise Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}" unless new_answer.kind_of? Array or new_answer.kind_of? String
          answer ||= []
          answer << new_answer
        when :hash
          raise Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}" unless new_answer.kind_of? Hash
          answer ||= {}
          answer = Backend.merge_answer(new_answer,answer)
        else
          answer = new_answer
          break
        end
      end

      return answer
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.