Sha256: 433a0adfdb1cd4de0653eb3e8003781442129967b038948b5e2945b75110df74

Contents?: true

Size: 1.93 KB

Versions: 3

Compression:

Stored size: 1.93 KB

Contents

module Oxidized
  module Source
    class JSONFile < Source
      require "json"
      def initialize
        @cfg = Oxidized.config.source.jsonfile
        super
      end

      def setup
        if @cfg.empty?
          Oxidized.asetus.user.source.jsonfile.file      = File.join(Oxidized::Config::ROOT,
                                                                     'router.json')
          Oxidized.asetus.user.source.jsonfile.map.name  = "name"
          Oxidized.asetus.user.source.jsonfile.map.model = "model"
          Oxidized.asetus.user.source.jsonfile.gpg       = false
          Oxidized.asetus.save :user
          raise NoConfig, "No source json config, edit #{Oxidized::Config.configfile}"
        end
        require 'gpgme' if @cfg.gpg?

        # map.name is mandatory
        return if @cfg.map.has_key?('name')

        raise InvalidConfig, "map/name is a mandatory source attribute, edit #{Oxidized::Config.configfile}"
      end

      def load(*)
        data = JSON.parse(open_file.read)
        data = string_navigate_object(data, @cfg.hosts_location) if @cfg.hosts_location?

        transform_json(data)
      end

      private

      def transform_json(data)
        nodes = []
        data.each do |node|
          next if node.empty?

          # map node parameters
          keys = {}
          @cfg.map.each do |key, want_position|
            keys[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
          end
          keys[:model] = map_model keys[:model] if keys.has_key? :model
          keys[:group] = map_group keys[:group] if keys.has_key? :group

          # map node specific vars
          vars = {}
          @cfg.vars_map.each do |key, want_position|
            vars[key.to_sym] = node_var_interpolate string_navigate_object(node, want_position)
          end
          keys[:vars] = vars unless vars.empty?

          nodes << keys
        end
        nodes
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
oxidized-0.32.1 lib/oxidized/source/jsonfile.rb
oxidized-0.32.0 lib/oxidized/source/jsonfile.rb
oxidized-0.31.0 lib/oxidized/source/jsonfile.rb