class Percolate::Adapter::ChefDataBagAdapter

An adapter for loading from Chef data bags.

Attributes

entities_data_bag[W]

Public Class Methods

new(data_source) click to toggle source
Calls superclass method Percolate::Adapter::BaseAdapter::new
# File lib/percolate/adapter/chef_data_bag_adapter.rb, line 27
def initialize(data_source)
  super

  @entities_data_bag = "entities"
end

Public Instance Methods

load_entities() click to toggle source
# File lib/percolate/adapter/chef_data_bag_adapter.rb, line 33
def load_entities
  begin
    @data_source.data_bag(@entities_data_bag).reduce({}) do |current, item_name|
      Percolate::Util.merge_attributes(
          current,
          @data_source.data_bag_item(@entities_data_bag, item_name).raw_data["entities"] || {}
      )
    end
  rescue Net::HTTPServerException => e
    # Reraise the exception if the status code isn't 404 Not Found.
    if e.response.code != "404"
      raise
    end

    nil
  end
end
load_facet(context, name) click to toggle source
# File lib/percolate/adapter/chef_data_bag_adapter.rb, line 51
def load_facet(context, name)
  name = name.to_s

  facets = begin
    @data_source.data_bag(context).map do |item_name|
      facets_hash = @data_source.data_bag_item(context, item_name).raw_data["facets"]

      facet_hash = facets_hash[name] || {}
      facet_type = facet_hash.fetch("type", name)
      facet_attrs = facet_hash.fetch("attrs", {})

      configure_facet(create_facet(facet_type), facet_attrs)
    end
  rescue Net::HTTPServerException => e
    # Reraise the exception if the status code isn't 404 Not Found.
    if e.response.code != "404"
      raise
    end

    []
  end

  if facets.size > 0
    facets[1...facets.size].reduce(facets[0]) do |current, other|
      current.merge(other)
    end
  else
    nil
  end
end