From 96631cd16523f1bd67556cc850207b0a55186056 Mon Sep 17 00:00:00 2001 From: Manisha Singhal Date: Wed, 10 Jan 2024 10:38:30 +0100 Subject: [PATCH] Refs #36981 - Add structure upload for deb repositories (#10639) --- .../repository/upload_content.rb | 31 +++++++++------- .../actions/pulp3/repository/import_upload.rb | 18 +++++++--- .../actions/pulp3/repository/save_artifact.rb | 35 ++++++++++++------- .../details/views/repository-info.html | 10 +++++- 4 files changed, 63 insertions(+), 31 deletions(-) diff --git a/app/lib/actions/pulp3/orchestration/repository/upload_content.rb b/app/lib/actions/pulp3/orchestration/repository/upload_content.rb index 5e96a601911..2c5ce3d01df 100644 --- a/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +++ b/app/lib/actions/pulp3/orchestration/repository/upload_content.rb @@ -6,22 +6,27 @@ class UploadContent < Pulp3::Abstract include Actions::Helpers::OutputPropagator def plan(repository, smart_proxy, file, unit_type_id) sequence do - checksum = Digest::SHA256.hexdigest(File.read(file[:path])) - duplicate_sha_path_content_list = ::Katello::Pulp3::PulpContentUnit.find_duplicate_unit(repository, unit_type_id, file, checksum) - duplicate_content_href = duplicate_sha_path_content_list&.results&.first&.pulp_href + if repository.deb? + upload_action_output = plan_action(Pulp3::Repository::UploadFile, repository, smart_proxy, file[:path]).output + artifact_action_output = plan_action(Pulp3::Repository::SaveArtifact, file, repository, smart_proxy, upload_action_output[:pulp_tasks], unit_type_id).output + else + checksum = Digest::SHA256.hexdigest(File.read(file[:path])) + duplicate_sha_path_content_list = ::Katello::Pulp3::PulpContentUnit.find_duplicate_unit(repository, unit_type_id, file, checksum) + duplicate_content_href = duplicate_sha_path_content_list&.results&.first&.pulp_href - unless duplicate_content_href - duplicate_sha_artifact_list = ::Katello::Pulp3::Api::Core.new(smart_proxy).artifacts_api.list("sha256": Digest::SHA256.hexdigest(File.read(file[:path]))) - duplicate_sha_artifact_href = duplicate_sha_artifact_list&.results&.first&.pulp_href - if duplicate_sha_artifact_href - artifact_action_output = plan_action(Pulp3::Repository::SaveArtifact, file, repository, smart_proxy, nil, unit_type_id, artifact_href: duplicate_sha_artifact_href).output - else - upload_action_output = plan_action(Pulp3::Repository::UploadFile, repository, smart_proxy, file[:path]).output - artifact_action_output = plan_action(Pulp3::Repository::SaveArtifact, file, repository, smart_proxy, upload_action_output[:pulp_tasks], unit_type_id).output + unless duplicate_content_href + duplicate_sha_artifact_list = ::Katello::Pulp3::Api::Core.new(smart_proxy).artifacts_api.list("sha256": Digest::SHA256.hexdigest(File.read(file[:path]))) + duplicate_sha_artifact_href = duplicate_sha_artifact_list&.results&.first&.pulp_href + if duplicate_sha_artifact_href + artifact_action_output = plan_action(Pulp3::Repository::SaveArtifact, file, repository, smart_proxy, nil, unit_type_id, artifact_href: duplicate_sha_artifact_href).output + else + upload_action_output = plan_action(Pulp3::Repository::UploadFile, repository, smart_proxy, file[:path]).output + artifact_action_output = plan_action(Pulp3::Repository::SaveArtifact, file, repository, smart_proxy, upload_action_output[:pulp_tasks], unit_type_id).output + end end - + artifact_action_output ||= {:content_unit_href => duplicate_content_href} end - artifact_action_output ||= {:content_unit_href => duplicate_content_href} + action_output = plan_action(Pulp3::Repository::ImportUpload, artifact_action_output, repository, smart_proxy).output plan_action(Pulp3::Repository::SaveVersion, repository, tasks: action_output[:pulp_tasks]).output plan_self(:subaction_output => action_output) diff --git a/app/lib/actions/pulp3/repository/import_upload.rb b/app/lib/actions/pulp3/repository/import_upload.rb index 65db562d24e..eb83534aa3e 100644 --- a/app/lib/actions/pulp3/repository/import_upload.rb +++ b/app/lib/actions/pulp3/repository/import_upload.rb @@ -12,17 +12,25 @@ def plan(save_artifact_output, repository, smart_proxy, options = {}) end def invoke_external_task + repo = ::Katello::Repository.find(input[:repository_id]) + repo_backend_service = repo.backend_service(smart_proxy) + if input[:save_artifact_output][:pulp_tasks]&.any? - content_unit_href = input[:save_artifact_output][:pulp_tasks].last[:created_resources].first + if repo.deb? + content_unit_href = input[:save_artifact_output][:pulp_tasks].last[:created_resources].find { |href| href.include?("/deb/packages") } + else + content_unit_href = input[:save_artifact_output][:pulp_tasks].last[:created_resources].first + end else content_unit_href = input[:save_artifact_output][:content_unit_href] end - repo = ::Katello::Repository.find(input[:repository_id]) - repo_backend_service = repo.backend_service(smart_proxy) - output[:content_unit_href] = content_unit_href - output[:pulp_tasks] = [repo_backend_service.add_content(content_unit_href)] + if repo.deb? + output[:pulp_tasks] = input[:save_artifact_output][:pulp_tasks] + else + output[:pulp_tasks] = [repo_backend_service.add_content(content_unit_href)] + end end end end diff --git a/app/lib/actions/pulp3/repository/save_artifact.rb b/app/lib/actions/pulp3/repository/save_artifact.rb index ae45659b59a..65cc4aaa797 100644 --- a/app/lib/actions/pulp3/repository/save_artifact.rb +++ b/app/lib/actions/pulp3/repository/save_artifact.rb @@ -16,20 +16,31 @@ def invoke_external_task content_type = input[:unit_type_id] content_backend_service = SmartProxy.pulp_primary.content_service(content_type) - existing_content = ::Katello::Pulp3::PulpContentUnit.find_duplicate_unit(repository, input[:unit_type_id], {filename: input[:options][:file_name]}, input[:options][:sha256]) - existing_content_href = existing_content&.results&.first&.pulp_href - - if ::Katello::RepositoryTypeManager.find_content_type(input[:unit_type_id]).repository_import_on_upload - output[:pulp_tasks] = [repository.backend_service(smart_proxy).repository_import_content(artifact_href, input[:options])] + if repository.deb? + repo_url = repository.backend_service(smart_proxy).repository_reference.repository_href + output[:pulp_tasks] = [content_backend_service.content_api_create(relative_path: input[:options][:file_name], + repository: repo_url, + repository_id: repository.id, + distribution: "katello", + component: "upload", + artifact: artifact_href, + content_type: content_type)] else - if existing_content_href - output[:content_unit_href] = existing_content_href - [] + existing_content = ::Katello::Pulp3::PulpContentUnit.find_duplicate_unit(repository, input[:unit_type_id], {filename: input[:options][:file_name]}, input[:options][:sha256]) + existing_content_href = existing_content&.results&.first&.pulp_href + + if ::Katello::RepositoryTypeManager.find_content_type(input[:unit_type_id]).repository_import_on_upload + output[:pulp_tasks] = [repository.backend_service(smart_proxy).repository_import_content(artifact_href, input[:options])] else - output[:pulp_tasks] = [content_backend_service.content_api_create(relative_path: input[:options][:file_name], - repository_id: repository.id, - artifact: artifact_href, - content_type: content_type)] + if existing_content_href + output[:content_unit_href] = existing_content_href + [] + else + output[:pulp_tasks] = [content_backend_service.content_api_create(relative_path: input[:options][:file_name], + repository_id: repository.id, + artifact: artifact_href, + content_type: content_type)] + end end end end diff --git a/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html b/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html index e9897d08444..1f8fd778c7e 100644 --- a/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +++ b/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html @@ -517,8 +517,9 @@

Content Counts

+
-
Upload Package
+
Upload Package
Upload File
Upload File
+
+ +
+
Upload Package
+ +
+