class ChefDK::Policyfile::Lister

Attributes

config[R]
policy_lock_content[RW]

Public Class Methods

new(config: nil) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 115
def initialize(config: nil)
  @config = config
  @policies_by_name = nil
  @policies_by_group = nil
  @policy_lock_content = {}
  @active_revisions = nil
end

Public Instance Methods

active_revisions() click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 172
def active_revisions
  @active_revisions ||= policies_by_group.inject(Set.new) do |set, (_group, policy_name_rev_id_map)|
    policy_name_rev_id_map.each do |policy_name, rev_id|
      set << rev_id
    end
    set
  end
end
empty?() click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 181
def empty?
  policies_by_name.empty? && policies_by_group.empty?
end
http_client() click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 185
def http_client
  @http_client ||= Chef::ServerAPI.new(config.chef_server_url,
    signing_key_filename: config.client_key,
    client_name: config.node_name)
end
orphaned_revisions(policy_name) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 164
def orphaned_revisions(policy_name)
  orphans = []
  policies_by_name[policy_name].each do |rev_id, _data|
    orphans << rev_id unless active_revisions.include?(rev_id)
  end
  orphans
end
policies_by_group() click to toggle source

A Hash with the following format:

"dev" => {
  "appserver" => "1111111111111111111111111111111111111111111111111111111111111111",
  "load-balancer" => "5555555555555555555555555555555555555555555555555555555555555555",
  "db" => "9999999999999999999999999999999999999999999999999999999999999999"
}
# File lib/chef-dk/policyfile/lister.rb, line 140
def policies_by_group
  @policies_by_group || fetch_policy_lists
  @policies_by_group
end
policies_by_name() click to toggle source

A Hash with the following format

{
  "appserver" => {
    "1111111111111111111111111111111111111111111111111111111111111111" => {},
    "2222222222222222222222222222222222222222222222222222222222222222" => {}
  },
# File lib/chef-dk/policyfile/lister.rb, line 129
def policies_by_name
  @policies_by_name || fetch_policy_lists
  @policies_by_name
end
revision_ids_by_group_for(policy_name) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 156
def revision_ids_by_group_for(policy_name)
  map = policies_by_group.inject({}) do |rev_id_map, (group_name, rev_id_map_for_group)|
    rev_id_map[group_name] = rev_id_map_for_group[policy_name]
    rev_id_map
  end
  PolicyGroupRevIDMap.new(policy_name, map)
end
revision_ids_by_group_for_each_policy() { |policy_name, rev_id_by_group| ... } click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 149
def revision_ids_by_group_for_each_policy
  policies_by_name.each do |policy_name, _policies|
    rev_id_by_group = revision_ids_by_group_for(policy_name)
    yield policy_name, rev_id_by_group
  end
end
revision_info_for(policy_name, _revision_id_list) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 145
def revision_info_for(policy_name, _revision_id_list)
  RevIDLockDataMap.new(policy_name, policy_lock_content[policy_name])
end
set!(policies_by_name, policies_by_group) click to toggle source

@api private Sets internal copy of policyfile data to policies_by_name and policies_by_group. Used for internal testing.

# File lib/chef-dk/policyfile/lister.rb, line 194
def set!(policies_by_name, policies_by_group)
  @policies_by_name = policies_by_name
  @policies_by_group = policies_by_group
  @active_revisions = nil
end

Private Instance Methods

fetch_policy_lists() click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 202
def fetch_policy_lists
  policy_list_data = http_client.get("policies")
  set_policies_by_name_from_api(policy_list_data)

  policy_group_data = http_client.get("policy_groups")
  set_policies_by_group_from_api(policy_group_data)
end
set_policies_by_group_from_api(policy_group_data) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 217
def set_policies_by_group_from_api(policy_group_data)
  @policies_by_group = policy_group_data.inject({}) do |map, (policy_group, policy_info)|
    map[policy_group] = (policy_info["policies"] || []).inject({}) do |rev_map, (policy_name, rev_info)|
      rev_map[policy_name] = rev_info["revision_id"]; rev_map
    end

    map
  end
end
set_policies_by_name_from_api(policy_list_data) click to toggle source
# File lib/chef-dk/policyfile/lister.rb, line 210
def set_policies_by_name_from_api(policy_list_data)
  @policies_by_name = policy_list_data.inject({}) do |map, (policy_name, policy_info)|
    map[policy_name] = policy_info["revisions"]
    map
  end
end