class ChefDK::PolicyfileServices::RmPolicy
Attributes
chef_config[R]
@api private
policy_name[R]
ui[R]
@api private
undo_record[R]
@api private
undo_stack[R]
@api private
Public Class Methods
new(config: nil, ui: nil, policy_name: nil)
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 42 def initialize(config: nil, ui: nil, policy_name: nil) @chef_config = config @ui = ui @policy_name = policy_name @policy_revision_data = nil @policy_exists = false @policy_group_data = nil @undo_record = Policyfile::UndoRecord.new @undo_stack = Policyfile::UndoStack.new end
Public Instance Methods
http_client()
click to toggle source
@api private An instance of Chef::ServerAPI configured with the user's server URL and credentials.
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 77 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
run()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 55 def run unless policy_exists? ui.err("Policy '#{policy_name}' does not exist on the server") return false end undo_record.description = "delete-policy #{policy_name}" unless policy_has_no_revisions? gather_policy_data_for_undo end http_client.delete("/policies/#{policy_name}") undo_stack.push(undo_record) ui.err("Removed policy '#{policy_name}'.") rescue => e raise DeletePolicyError.new("Failed to delete policy '#{policy_name}'", e) end
Private Instance Methods
fetch_policy_revision_data()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 134 def fetch_policy_revision_data @policy_revision_data = http_client.get("/policies/#{policy_name}") @policy_exists = true rescue Net::HTTPClientException => e raise unless e.response.code == "404" @policy_exists = false end
gather_policy_data_for_undo()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 89 def gather_policy_data_for_undo revisions = policy_revision_data["revisions"].keys revisions.each do |revision_id| policy_revision_data = http_client.get("/policies/#{policy_name}/revisions/#{revision_id}") policy_groups = policy_groups_using_revision(revision_id) if policy_groups.empty? undo_record.add_policy_revision(policy_name, nil, policy_revision_data) else policy_groups.each do |policy_group| undo_record.add_policy_revision(policy_name, policy_group, policy_revision_data) end end end end
policy_exists?()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 121 def policy_exists? return true if @policy_exists fetch_policy_revision_data @policy_exists end
policy_group_data()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 117 def policy_group_data @policy_group_data ||= http_client.get("/policy_groups") end
policy_groups_using_revision(revision_id)
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 105 def policy_groups_using_revision(revision_id) groups = [] policy_group_data.each do |group_name, group_info| next unless group_info.key?("policies") && !group_info["policies"].empty? next unless group_info["policies"].key?(policy_name) next unless group_info["policies"][policy_name]["revision_id"] == revision_id groups << group_name if group_info end groups end
policy_has_no_revisions?()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 85 def policy_has_no_revisions? policy_revision_data.empty? || policy_revision_data["revisions"].empty? end
policy_revision_data()
click to toggle source
# File lib/chef-dk/policyfile_services/rm_policy.rb, line 128 def policy_revision_data return @policy_revision_data if @policy_exists fetch_policy_revision_data end