|
module Katello
|
|
module Pulp3
|
|
module ServiceCommon
|
|
def create_remote
|
|
response = nil
|
|
if remote_options[:url]&.start_with?('uln')
|
|
remote_file_data = api.class.remote_uln_class.new(remote_options)
|
|
else
|
|
remote_file_data = api.remote_class.new(remote_options)
|
|
end
|
|
reformat_api_exception do
|
|
response = api.get_remotes_api(url: remote_options[:url]).create(remote_file_data)
|
|
end
|
|
response
|
|
end
|
|
|
|
def test_remote_name
|
|
"test_remote_#{SecureRandom.uuid}"
|
|
end
|
|
|
|
# When updating a repository, we need to update the remote, but this is
|
|
# an async task. If some validation occurs, we won't know about it until
|
|
# the task runs. Errors during a repository update task are very difficult to
|
|
# handle once the task is in its run phase, so this creates a test remote
|
|
# with a random name in order to validate the remote's configuration
|
|
def create_test_remote
|
|
test_remote_options = remote_options
|
|
test_remote_options[:name] = test_remote_name
|
|
if remote_options[:url]&.start_with?('uln')
|
|
remote_file_data = api.class.remote_uln_class.new(test_remote_options)
|
|
else
|
|
remote_file_data = api.remote_class.new(test_remote_options)
|
|
end
|
|
|
|
reformat_api_exception do
|
|
response = api.get_remotes_api(url: remote_options[:url]).create(remote_file_data)
|
|
#delete is async, but if its not properly deleted, orphan cleanup will take care of it later
|
|
delete_remote(href: response.pulp_href)
|
|
end
|
|
end
|
|
|
|
def ignore_404_exception(*)
|
|
yield
|
|
rescue api.api_exception_class => e
|
|
raise e unless e.code == 404
|
|
nil
|
|
end
|
|
|
|
def reformat_api_exception
|
|
yield
|
|
rescue api.client_module::ApiError => exception
|
|
body = JSON.parse(exception.response_body) rescue body
|
|
body = body.values.join(',') if body.respond_to?(:values)
|
|
raise ::Katello::Errors::Pulp3Error, body
|
|
end
|
|
end
|
|
end
|
|
end
|