app/controllers/katello/api/v2/exports_controller.rb
module Katello
class Api::V2::ExportsController < Api::V2::ApiController
resource_description do
api_version 'v2'
api_base_url "/katello/api"
end
def_param_group :export do
param :chunk_size_gb, :number,
:desc => N_("Split the exported content into archives "\
"no greater than the specified size in gigabytes."), :required => false
param :format, ::Katello::Pulp3::ContentViewVersion::Export::FORMATS,
:desc => N_("Export formats."\
"Choose syncable if the exported content needs to be in a yum format. "\
"This option is only available for %{syncable_repos} repositories. "\
"Choose importable if the importing server uses the same version "\
" and exported content needs to be one "\
"of %{importable_repos} repositories."\
% {
syncable_repos: ::Katello::Repository.exportable_types(
format: ::Katello::Pulp3::ContentViewVersion::Export::SYNCABLE).join(", "),
importable_repos: ::Katello::Repository.exportable_types(
format: ::Katello::Pulp3::ContentViewVersion::Export::IMPORTABLE).join(", ")
}),
:required => false
end
def_param_group :org_fail_on_missing_content do
param :fail_on_missing_content, :bool,
:desc => N_("Fails if any of the repositories belonging to this organization"\
" are unexportable. False by default."), :required => false
end
def_param_group :version_fail_on_missing_content do
param :fail_on_missing_content, :bool,
:desc => N_("Fails if any of the repositories belonging to this version"\
" are unexportable. False by default."), :required => false
end
def_param_group :destination_server do
param :destination_server, String, :desc => N_("Destination Server name"), :required => false
end
def export_repository
tasks = async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::ExportRepository,
@repository,
chunk_size: params[:chunk_size_gb],
from_history: @history,
format: find_export_format)
respond_for_async :resource => tasks
end
def export_content_view_version
tasks = async_task(Actions::Katello::ContentViewVersion::Export,
content_view_version: @version,
destination_server: params[:destination_server],
chunk_size: params[:chunk_size_gb],
from_history: @history,
format: find_export_format,
fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]))
respond_for_async :resource => tasks
end
def export_library
tasks = async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::ExportLibrary,
@organization,
destination_server: params[:destination_server],
chunk_size: params[:chunk_size_gb],
from_history: @history,
format: find_export_format,
fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]))
respond_for_async :resource => tasks
end
def find_export_format
if params[:format]
unless ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.include?(params[:format])
fail HttpErrors::UnprocessableEntity, _('Invalid export format provided. Format must be one of %s ') %
::Katello::Pulp3::ContentViewVersion::Export::FORMATS.join(',')
end
params[:format]
else
Setting[:default_export_format]
end
end
def find_exportable_repository
@repository = Repository.find_by_id(params[:id])
if @repository.blank?
throw_resource_not_found(name: 'repository', id: params[:id])
end
unless @repository.organization.can_export_content?
throw_resource_not_found(name: 'organization', id: @repository.organization.id)
end
end
def find_exportable_organization
find_organization
unless @organization.can_export_content?
throw_resource_not_found(name: 'organization', id: params[:organization_id])
end
end
def find_exportable_content_view_version
@version = ContentViewVersion.exportable.find_by_id(params[:id])
throw_resource_not_found(name: 'content view version', id: params[:id]) if @version.blank?
@view = @version.content_view
end
def find_history
if params[:from_history_id].present?
@history = ::Katello::ContentViewVersionExportHistory.find(params[:from_history_id])
if @history.blank?
throw_resource_not_found(name: 'export history',
id: params[:from_history_id])
end
else
@history = ::Katello::ContentViewVersionExportHistory.
latest(@view, destination_server: params[:destination_server])
if @history.blank?
msg = _("No existing export history was found to perform an incremental export. A full export must be performed")
fail HttpErrors::NotFound, msg
end
end
end
end
end