Skip to content

Commit

Permalink
Refs #36981 - Add structure upload for deb repositories (#10639)
Browse files Browse the repository at this point in the history
  • Loading branch information
Manisha15 authored Jan 10, 2024
1 parent 96da01c commit 96631cd
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 31 deletions.
31 changes: 18 additions & 13 deletions app/lib/actions/pulp3/orchestration/repository/upload_content.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
18 changes: 13 additions & 5 deletions app/lib/actions/pulp3/repository/import_upload.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
35 changes: 23 additions & 12 deletions app/lib/actions/pulp3/repository/save_artifact.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -517,8 +517,9 @@ <h4 translate>Content Counts</h4>
<div class="divider" ng-if="repository.content_type === 'ostree'"/>
</section>

<span ng-hide="(repository.content_type === 'deb' && repository.url)">
<section class="well" ng-if="permitted('edit_products', product) && !product.redhat && repository.content_type !== 'docker' && repository.content_type !== 'ostree' && repository.content_type !== 'ansible_collection'">
<h5 translate ng-show="repository.content_type === 'yum'">Upload Package</h5>
<h5 translate ng-show="repository.content_type === 'yum' || 'deb'">Upload Package</h5>
<h5 translate ng-show="repository.content_type === 'file'">Upload File</h5>

<form role="form"
Expand All @@ -544,6 +545,13 @@ <h5 translate ng-show="repository.content_type === 'file'">Upload File</h5>

</form>
</section>
</span>
<span ng-show="(repository.content_type === 'deb' && repository.url)">
<section class="well">
<h5 translate>Upload Package</h5>
<div class="alert alert-info" role="alert" translate>If you want to upload individual packages, create a separate repository with an empty "Upstream URL" field.</div>
</section>
</span>

<section ng-show="repository.content_type === 'yum'">
<div class="divider"></div>
Expand Down

0 comments on commit 96631cd

Please sign in to comment.