Bug #33966
closedCapsule sync task failed to refresh repo that doesn't have feed url
Description
Description of problem:
There are 2 issues here:
1) The "needs_updates?" will always be "true" so Satellite will always try to refresh the repos in the Capsule.
2) Capsule sync task failed to refresh custom repository without feed url:
---------------------------------------------
5: Actions::Pulp3::Orchestration::Repository::RefreshRepos (skipped) [ 6.90s / 6.41s ]
Error:
ArgumentError
bad argument (expected URI object or URI string)
---
- "/opt/rh/rh-ruby27/root/usr/share/ruby/uri/common.rb:739:in `URI'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository/yum.rb:15:in
`remote_options'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository.rb:197:in
`compute_remote_options'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository_mirror.rb:37:in
`needs_updates?'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository.rb:167:in
`mirror_needs_updates?'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/lib/actions/katello/capsule_content/refresh_repos.rb:43:in
`block in invoke_external_task'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/activerecord-6.0.3.7/lib/active_record/relation/delegation.rb:87:in
`each'"
- "/opt/theforeman/tfm/root/usr/share/gems/gems/activerecord-6.0.3.7/lib/active_record/relation/delegation.rb:87:in
`each'"
--------------------------------------------
Below should be the offending lines
In /opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository_mirror.rb
def needs_updates?
remote = fetch_remote
return true if remote.blank?
options = repo_service.compute_remote_options <=============== It seems like "self.remote_options" should be used here
options.keys.any? { |key| remote.send(key) != options[key] }
end
In "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-4.1.1.39/app/services/katello/pulp3/repository/yum.rb",
def remote_options
options = common_remote_options
uri = URI(root.url) <========================== This will gives error if root repo has no feed.
unless root.upstream_authentication_token.blank?
options.merge!(sles_auth_token: root.upstream_authentication_token)
end
options.merge!(url: uri.to_s, policy: root.download_policy)
end
Steps to Reproduce:
1. Create a custom repo without feed and manually upload content to it.
2. Create a CV add the custom repo to the CV.
3. Publish and Promote the CV which should trigger a capsule sync task.
4. The capsule sync task should finish without error.
5. Upload new content to the custom repo.
6. Publush and Promote the CV again.
Actual results:
Capsule sync task failed to refresh repos with "bad argument (expected URI object or URI string)" error.
Expected results:
No error. Only refresh repos as needed