module Katello module Resources module Candlepin class ActivationKey < CandlepinResource class << self def get(id = nil, params = '', owner = nil) akeys_json = super(path(id, owner) + params, self.default_headers).body akeys = JSON.parse(akeys_json) akeys = [akeys] unless id.nil? ::Katello::Util::Data.array_with_indifferent_access akeys end def create(name, owner_key, auto_attach) url = "/candlepin/owners/#{owner_key}/activation_keys" JSON.parse(self.post(url, {:name => name, :autoAttach => auto_attach}.to_json, self.default_headers).body).with_indifferent_access end def update(id, release_version, service_level, auto_attach) attrs = { :releaseVer => release_version, :serviceLevel => service_level, :autoAttach => auto_attach }.delete_if { |_k, v| v.nil? } JSON.parse(self.put(path(id), attrs.to_json, self.default_headers).body).with_indifferent_access end def destroy(id) fail(ArgumentError, "activation key id has to be specified") unless id self.delete(path(id), self.default_headers).code.to_i end def pools(owner_key) Candlepin::Owner.pools(owner_key) end def key_pools(id) kp_json = Candlepin::CandlepinResource.get(join_path(path(id), "pools"), self.default_headers).body key_pools = JSON.parse(kp_json) ::Katello::Util::Data.array_with_indifferent_access key_pools end def add_product(id, product_id) cppath = join_path(path(id), "product/#{product_id}") product = self.post(cppath, {}, self.default_headers) JSON.parse(product).with_indifferent_access end def remove_product(id, product_id) product = self.delete(join_path(path(id), "product/#{product_id}"), self.default_headers) JSON.parse(product).with_indifferent_access end def add_pools(id, pool_id, quantity) cppath = join_path(path(id), "pools/#{pool_id}") quantity = Integer(quantity) rescue nil cppath += "?quantity=#{quantity}" if quantity && quantity > 0 pool = self.post(cppath, {}, self.default_headers) JSON.parse(pool).with_indifferent_access end def remove_pools(id, pool_id) pool = self.delete(join_path(path(id), "pools/#{pool_id}"), self.default_headers) JSON.parse(pool).with_indifferent_access end def content_overrides(id) result = Candlepin::CandlepinResource.get(join_path(path(id), 'content_overrides'), self.default_headers).body ::Katello::Util::Data.array_with_indifferent_access(JSON.parse(result)) end # expected params # id : ID of the Activation Key # content_overrides => Array of content override hashes def update_content_overrides(id, content_overrides) attrs_to_delete = [] attrs_to_update = [] content_overrides.each do |content_override| if content_override[:value] attrs_to_update << content_override else attrs_to_delete << content_override end end if attrs_to_update.present? result = Candlepin::CandlepinResource.put(join_path(path(id), 'content_overrides'), attrs_to_update.to_json, self.default_headers) end if attrs_to_delete.present? client = Candlepin::CandlepinResource.rest_client(Net::HTTP::Delete, :delete, join_path(path(id), 'content_overrides')) client.options[:payload] = attrs_to_delete.to_json result = client.delete({:accept => :json, :content_type => :json}.merge(User.cp_oauth_header)) end ::Katello::Util::Data.array_with_indifferent_access(JSON.parse(result || '{}')) end def path(id = nil, owner_id = nil) if owner_id "/candlepin/owners/#{owner_id}/activation_keys/#{id}" else "/candlepin/activation_keys/#{id}" end end end end end end end