Project

General

Profile

Download (4.37 KB) Statistics
| Branch: | Tag: | Revision:
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
(1-1/18)