class ChefCLI::PolicyfileServices::ShowPolicy

Attributes

chef_config[R]
policy_group[R]
policy_name[R]
ui[R]

Public Class Methods

new(config: nil, ui: nil, policy_name: nil, policy_group: nil, show_orphans: false, summary_diff: false, pager: false) click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 69
def initialize(config: nil, ui: nil, policy_name: nil, policy_group: nil, show_orphans: false, summary_diff: false, pager: false)
  @chef_config = config
  @ui = ui
  @policy_name = policy_name
  @policy_group = policy_group
  @show_orphans = show_orphans
  @summary_diff = summary_diff
  @enable_pager = pager
end

Public Instance Methods

display_all_policies() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 128
def display_all_policies
  if policy_lister.empty?
    ui.err("No policies or policy groups exist on the server")
    return
  end
  if policy_lister.policies_by_name.empty?
    ui.err("No policies exist on the server")
    return
  end
  policy_lister.revision_ids_by_group_for_each_policy do |policy_name, rev_id_by_group|
    report.h1(policy_name)

    if rev_id_by_group.empty?
      ui.err("Policy #{policy_name} is not assigned to any groups")
      ui.err("")
    else
      rev_ids_for_report = format_rev_ids_for_report(rev_id_by_group)
      report.table_list(rev_ids_for_report)
    end

    if show_orphans?
      orphans = policy_lister.orphaned_revisions(policy_name)

      unless orphans.empty?
        report.h2("Orphaned:")
        formatted_orphans = orphans.map { |id| shorten_rev_id(id) }
        report.list(formatted_orphans)
      end
    end
  end
end
display_policy_revision() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 122
def display_policy_revision
  lock = Policyfile::ComparisonBase::PolicyGroup.new(policy_group, policy_name, http_client).lock
  pager = Pager.new(enable_pager: enable_pager?)
  pager.with_pager { |p| p.ui.msg(FFI_Yajl::Encoder.encode(lock, pretty: true)) }
end
display_single_policy() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 160
def display_single_policy
  report.h1(policy_name)
  rev_id_by_group = policy_lister.revision_ids_by_group_for(policy_name)

  if rev_id_by_group.empty? || rev_id_by_group.all? { |_k, rev| rev.nil? }
    ui.err("No policies named '#{policy_name}' are associated with a policy group")
    ui.err("")
  elsif show_summary_diff?
    unique_rev_ids = rev_id_by_group.unique_revision_ids
    revision_info = policy_lister.revision_info_for(policy_name, unique_rev_ids)

    ljust_size = rev_id_by_group.max_group_name_length + 2

    cbs_with_differing_ids = revision_info.cbs_with_differing_ids

    rev_id_by_group.each do |group_name, rev_id|
      heading = "#{group_name}:".ljust(ljust_size) + shorten_rev_id(rev_id)
      report.h2(heading)

      differing_cbs_version_info = cbs_with_differing_ids.inject({}) do |cb_version_info, cb_name|

        version, identifier = revision_info.cb_info_for(rev_id, cb_name)

        cb_info_for_report =
          if !version.nil?
            "#{version} (#{shorten_rev_id(identifier)})"
          else
            "*NONE*"
          end

        cb_version_info[cb_name] = cb_info_for_report

        cb_version_info
      end

      report.table_list(differing_cbs_version_info)
    end

  else
    rev_ids_for_report = format_rev_ids_for_report(rev_id_by_group)
    report.table_list(rev_ids_for_report)
  end

  if show_orphans?
    orphans = policy_lister.orphaned_revisions(policy_name)

    unless orphans.empty?
      report.h2("Orphaned:")
      formatted_orphans = orphans.map { |id| shorten_rev_id(id) }
      report.list(formatted_orphans)
    end
  end
end
enable_pager?() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 110
def enable_pager?
  @enable_pager
end
http_client() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 218
def http_client
  @http_client ||= Chef::ServerAPI.new(chef_config.chef_server_url,
    signing_key_filename: chef_config.client_key,
    client_name: chef_config.node_name)
end
policy_lister() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 118
def policy_lister
  @policy_info_fetcher ||= Policyfile::Lister.new(config: chef_config)
end
report() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 114
def report
  @report ||= ReportPrinter.new(ui)
end
run() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 79
def run
  if show_policy_revision?
    display_policy_revision
  elsif show_all_policies?
    display_all_policies
  else
    display_single_policy
  end
  true
rescue PolicyfileNestedException
  raise
rescue => e
  raise PolicyfileListError.new("Failed to list policyfile data from the server", e)
end
shorten_rev_id(revision_id) click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 214
def shorten_rev_id(revision_id)
  revision_id[0, 10]
end
show_all_policies?() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 98
def show_all_policies?
  !policy_name
end
show_orphans?() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 102
def show_orphans?
  @show_orphans
end
show_policy_revision?() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 94
def show_policy_revision?
  !!policy_group
end
show_summary_diff?() click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 106
def show_summary_diff?
  @summary_diff
end

Private Instance Methods

format_rev_ids_for_report(rev_id_by_group) click to toggle source
# File lib/chef-cli/policyfile_services/show_policy.rb, line 226
def format_rev_ids_for_report(rev_id_by_group)
  rev_id_by_group.format_revision_ids do |rev_id|
    rev_id ? rev_id[0, 10] : "*NOT APPLIED*"
  end
end