Class: ChefCLI::PolicyfileServices::CleanPolicyCookbooks
- Inherits:
-
Object
- Object
- ChefCLI::PolicyfileServices::CleanPolicyCookbooks
- Defined in:
- lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb
Instance Attribute Summary collapse
-
#chef_config ⇒ Object
readonly
Returns the value of attribute chef_config.
-
#ui ⇒ Object
readonly
Returns the value of attribute ui.
Instance Method Summary collapse
- #active_cookbooks ⇒ Object
- #all_cookbooks ⇒ Object
- #cookbook_revisions_in_policy(name, revision_id) ⇒ Object private
- #cookbooks_to_clean ⇒ Object
- #gc_cookbooks ⇒ Object
-
#http_client ⇒ Object
private
An instance of Chef::ServerAPI configured with the user’s server URL and credentials.
-
#initialize(config: nil, ui: nil) ⇒ CleanPolicyCookbooks
constructor
A new instance of CleanPolicyCookbooks.
- #policy_revisions_by_name ⇒ Object private
- #run ⇒ Object
Constructor Details
#initialize(config: nil, ui: nil) ⇒ CleanPolicyCookbooks
Returns a new instance of CleanPolicyCookbooks.
32 33 34 35 36 37 38 39 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 32 def initialize(config: nil, ui: nil) @chef_config = config @ui = ui @all_cookbooks = nil @active_cookbooks = nil @all_policies = nil end |
Instance Attribute Details
#chef_config ⇒ Object (readonly)
Returns the value of attribute chef_config.
28 29 30 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 28 def chef_config @chef_config end |
#ui ⇒ Object (readonly)
Returns the value of attribute ui.
30 31 32 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 30 def ui @ui end |
Instance Method Details
#active_cookbooks ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 70 def active_cookbooks policy_revisions_by_name.inject({}) do |cb_map, (policy_name, revision_ids)| revision_ids.each do |revision_id| cookbook_revisions_in_policy(policy_name, revision_id).each do |cb_name, identifier| cb_map[cb_name] ||= Set.new cb_map[cb_name] << identifier end end cb_map end end |
#all_cookbooks ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 62 def all_cookbooks cookbook_list = http_client.get("/cookbook_artifacts") cookbook_list.inject({}) do |cb_map, (name, cb_info)| cb_map[name] = cb_info["versions"].map { |v| v["identifier"] } cb_map end end |
#cookbook_revisions_in_policy(name, revision_id) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
104 105 106 107 108 109 110 111 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 104 def cookbook_revisions_in_policy(name, revision_id) policy_revision_data = http_client.get("/policies/#{name}/revisions/#{revision_id}") policy_revision_data["cookbook_locks"].inject({}) do |cb_map, (cb_name, lock_info)| cb_map[cb_name] = lock_info["identifier"] cb_map end end |
#cookbooks_to_clean ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 82 def cookbooks_to_clean active_cbs = active_cookbooks all_cookbooks.inject({}) do |cb_map, (cb_name, revisions)| active_revs = active_cbs[cb_name] || Set.new inactive_revs = Set.new(revisions) - active_revs cb_map[cb_name] = inactive_revs unless inactive_revs.empty? cb_map end end |
#gc_cookbooks ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 47 def gc_cookbooks cookbooks = cookbooks_to_clean if cookbooks.empty? ui.msg("No cookbooks deleted.") end cookbooks.each do |name, identifiers| identifiers.each do |identifier| http_client.delete("/cookbook_artifacts/#{name}/#{identifier}") ui.msg("DELETE #{name} #{identifier}") end end end |
#http_client ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
An instance of Chef::ServerAPI configured with the user’s server URL and credentials.
116 117 118 119 120 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 116 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_revisions_by_name ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
95 96 97 98 99 100 101 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 95 def policy_revisions_by_name policies_list = http_client.get("/policies") policies_list.inject({}) do |policies_map, (name, policy_info)| policies_map[name] = policy_info["revisions"].keys policies_map end end |
#run ⇒ Object
41 42 43 44 45 |
# File 'lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb', line 41 def run gc_cookbooks rescue => e raise PolicyCookbookCleanError.new("Failed to cleanup policy cookbooks", e) end |