namespace :katello do
desc <<-DESCRIPTION Removes obsolete empty deb metadata content from deb type library instance repositories. Options: REPO_ID: Must be set to a Katello repository ID to run the cleanup for just that repository. Can also be set to 'all_deb_library_instances', but this could take some time to finish. DESCRIPTION task :clean_empty_deb_metadata => ['environment', 'dynflow:client', 'check_ping'] do affected_repositories_counter = 0 user_param = ENV['REPO_ID'] if user_param.blank? puts 'Hint: The REPO_ID env var must be set to a Katello repository ID, or else to "all_deb_library_instances"!' fail 'REPO_ID is not set! Please re-run this rake task with a suitable value for REPO_ID!' elsif user_param == 'all_deb_library_instances' puts "Checking all deb type library instance repositories for obsolete empty metadata content." repositories_to_check = ::Katello::Repository.deb_type.library else single_repository = ::Katello::Repository.find(user_param) fail "Repository with REPO_ID=#{user_param} is not a deb type repository!" unless single_repository.deb? fail "Repository with REPO_ID=#{user_param} is not a library instance repository!" unless single_repository.library_instance? puts "Checking the deb type repository '#{single_repository.name}' with id='#{user_param}' for obsolete empty metadata content." repositories_to_check = [single_repository] end repositories_to_check.each do |repository| backend_service = repository.backend_service(SmartProxy.pulp_primary) version_href = repository.version_href query_opts = { :repository_version => version_href, :distribution => 'katello', :component => 'empty', } empty_component_query = backend_service.api.content_release_components_api.list(query_opts) next unless empty_component_query.count == 1 affected_repositories_counter += 1 component_href = empty_component_query.results[0].pulp_href repository_href = backend_service.repository_reference.repository_href task_href = backend_service.api.repositories_api.modify(repository_href, remove_content_units: [component_href], base_version: version_href).task pulp_task = Katello::Pulp3::Task.new(SmartProxy.pulp_primary, 'task' => task_href) start = Time.now loop do pulp_task.poll fail pulp_task.error if pulp_task.error break if pulp_task.done? fail 'Timed out' if (Time.now - start) > 600 sleep 1 end new_version_href = ::Katello::Pulp3::Task.version_href(pulp_task) fail "Pulp task '#{task_href}' has completed, but we could not extract a new version_href!" if new_version_href.nil? repository.version_href = new_version_href repository.save! ForemanTasks.sync_task(::Actions::Katello::Repository::MetadataGenerate, repository) runner = Class.new do include ::Actions::Helpers::RollingCVRepos end runner.new.update_rolling_content_views_async(repository, true) end case affected_repositories_counter when 0 puts "Found no repositories with obsolete empty metadata content." when 1 puts "Removed obsolete empty metadata content from 1 repository." else puts "Removed obsolete empty metadata content from #{affected_repositories_counter} repositories." end end
end