app/lib/katello/resources/cdn/katello_cdn.rb
module Katello
module Resources
module CDN
class KatelloCdn < CdnResource
def initialize(url, options)
@organization_label = options.delete(:organization_label)
@content_view_label = options.delete(:content_view_label) || ::Katello::OrganizationCreator::DEFAULT_CONTENT_VIEW_LABEL
@lifecycle_environment_label = options.delete(:lifecycle_environment_label) || ::Katello::OrganizationCreator::DEFAULT_LIFECYCLE_ENV_LABEL
fail ArgumentError, "No upstream organization was specified" if @organization_label.nil?
super
end
def fetch_repo_set(content_path)
url = "/katello/api/v2/repository_sets?organization_id=#{organization['id']}&search=#{CGI.escape("path = #{content_path}")}"
response = get(url)
JSON.parse(response)['results'].first
end
def fetch_paths(content_path)
repo_set = fetch_repo_set(content_path)
fail _("Upstream organization %s does not provide this content path") % @organization_label if repo_set.nil?
params = {
full_result: true,
organization_id: organization['id'],
content_view_id: content_view_id,
environment_id: lifecycle_environment_id,
search: CGI.escape("content_label = #{repo_set['label']}")
}
query_params = params.map { |key, value| "#{key}=#{value}" }
url = "/katello/api/v2/repositories?#{query_params.join("&")}"
response = get(url)
json_body = JSON.parse(response)
results = json_body['results']
results.map do |repo|
Katello::Content.substitute_content_path(arch: repo['arch'],
releasever: repo['minor'],
content_path: content_path)
end
end
def valid_path?(_path, _postfix)
true
end
def validate!
organization && content_view_id && lifecycle_environment_id
end
def debug_certificate
get("/katello/api/v2/organizations/#{organization['id']}/download_debug_certificate")
end
def content_view_id
rs = get("/katello/api/v2/organizations/#{organization['id']}/content_views?search=#{CGI.escape("label=#{@content_view_label}")}")
content_view = JSON.parse(rs)['results']&.first
if content_view.blank?
fail _("Upstream organization %{org_label} does not have a content view with the label %{cv_label}") % { org_label: @organization_label,
cv_label: @content_view_label }
end
content_view["id"]
end
def lifecycle_environment_id
rs = get("/katello/api/v2/organizations/#{organization['id']}/environments?full_result=true")
env = JSON.parse(rs)['results'].find { |lce| lce['label'] == @lifecycle_environment_label }
if env.blank?
fail _("Upstream organization %{org_label} does not have a lifecycle environment with the label %{lce_label}") % { org_label: @organization_label,
lce_label: @lifecycle_environment_label }
end
env["id"]
end
def repository_url(content_label:, arch:, major:, minor:)
params = {
search: CGI.escape("content_label = #{content_label}")
}
params[:content_view_id] = content_view_id if @content_view_label
params[:environment_id] = lifecycle_environment_id if @lifecycle_environment_label
query_params = params.map { |key, value| "#{key}=#{value}" }
url = "/katello/api/v2/organizations/#{organization['id']}/repositories?#{query_params.join('&')}"
response = get(url)
repository = JSON.parse(response)['results']&.find { |r| r['arch'] == arch && r['major'] == major && r['minor'] == minor }
if repository.nil?
msg_params = { content_label: content_label,
arch: arch,
major: major,
minor: minor,
org_label: @organization_label,
cv_label: @content_view_label || Katello::OrganizationCreator::DEFAULT_CONTENT_VIEW_LABEL,
env_label: @lifecycle_environment_label || Katello::OrganizationCreator::DEFAULT_LIFECYCLE_ENV_LABEL
}
fail _("Repository with content label: '%{content_label}'#{arch ? ', arch: \'%{arch}\'' : ''}#{minor ? ', version: \'%{minor}\'' : ''} was not found in upstream organization '%{org_label}',"\
" content view '%{cv_label}' and lifecycle environment '%{env_label}'") % msg_params
end
repository['full_path']
end
private
def organization
@organization ||= find_organization(@organization_label)
end
def find_organization(label)
response = get("/api/v2/organizations?search=#{CGI.escape("label = #{label}")}")
JSON.parse(response)['results'].first.tap do |org|
fail "Specified organization was not found: #{label}" if org.nil?
end
rescue => e
Rails.logger.error("Couldn't load upstream organization with label=#{label} error=#{e.message}")
raise e
end
end
end
end
end