katello 4.14.0 → 4.14.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/sync_management/sync_management.js +13 -9
  3. data/app/controllers/katello/api/v2/activation_keys_controller.rb +2 -2
  4. data/app/controllers/katello/api/v2/organizations_controller.rb +1 -0
  5. data/app/lib/actions/katello/repository/create_root.rb +3 -2
  6. data/app/lib/actions/katello/repository/destroy.rb +1 -5
  7. data/app/lib/actions/katello/repository/update.rb +1 -5
  8. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +6 -2
  9. data/app/models/katello/concerns/content_facet_host_extensions.rb +12 -36
  10. data/app/models/katello/concerns/host_managed_extensions.rb +18 -16
  11. data/app/models/katello/host/subscription_facet.rb +1 -1
  12. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +1 -1
  13. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +1 -1
  14. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  15. data/app/views/katello/api/v2/content_views/show.json.rabl +0 -1
  16. data/app/views/katello/sync_management/index.html.erb +2 -2
  17. data/engines/bastion/app/assets/javascripts/bastion/i18n/i18n.module.js +4 -0
  18. data/engines/bastion/vendor/assets/javascripts/bastion/angular-gettext/angular-gettext.js +5 -1
  19. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js +0 -1
  20. data/lib/katello/version.rb +1 -1
  21. data/webpack/redux/actions/RedHatRepositories/helpers.js +9 -9
  22. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +6 -4
  23. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +1 -1
  24. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21ce45d5f478e1cbfce9d978a25ac49d78cb24ae72b60df06d0d040f0a9ad22f
4
- data.tar.gz: c7051ac4f64ee8815b4df564973146d24254a4af0dbadfc719228ddb1343543b
3
+ metadata.gz: bdd67a5d3169bbda126588bc123ac23ad95514e886fd546d212c149f5a62f7b8
4
+ data.tar.gz: 4b5681c673e1ecb65a71796ef5b493380363345336100efdf55a06ae818bf708
5
5
  SHA512:
6
- metadata.gz: bca7d73c35c724f8f8b19d1b2311f05ea0eb2b1f56ea9c74f9ba61743d85665deca7887ba8f1d218ceb92f08e732a37fb457c9eb16ef5aac2c21e5ed9e1c9fb6
7
- data.tar.gz: 9f0018048dd7dd5639ce6665e2aff7dfa040407067efc6c484a4eac6e1c960e21902892cdd446d008eab0afccf06bdd50c9d96d0e4367c0a96b5372da6540981
6
+ metadata.gz: d1834fc21b5fe071b50fb04837dd361f8d5dbe49155a3bfc195151ac1a3c7154dc426d25cd83cbd6e2d90c3d89135068ca79c5ce032e65ad29cccad57af3527b
7
+ data.tar.gz: 25fb6125c429eea841b1f1c4be625a4f51268ef126a3122f7357104721aa883d8a38cfb958565a642c7c6edf52b59119a0ded847063b9012ee92476890faa887
@@ -205,10 +205,22 @@ KT.content = (function () {
205
205
  $(this).collapse();
206
206
  });
207
207
  };
208
+ populate_repo_status = function () {
209
+ var ids = [];
210
+ $.each(KT.repo_status, function (repo_id, status) {
211
+ if (status.is_running) {
212
+ ids.push(repo_id);
213
+ KT.content.draw_syncing(repo_id, status.progress.progress, status.sync_id);
214
+ }
215
+ });
216
+ KT.content.reset_products(KT.repo_status);
217
+ KT.content_actions.addSyncing(ids);
218
+ }
208
219
 
209
220
  return {
210
221
  updateProduct: updateProduct,
211
222
  updateRepo: updateRepo,
223
+ populateRepoStatus: populate_repo_status,
212
224
  finishRepo: finishRepo,
213
225
  select_all: select_all,
214
226
  select_none: select_none,
@@ -346,15 +358,7 @@ KT.content_actions = (function () {
346
358
  };
347
359
  })();
348
360
 
349
- var ids = [];
350
- $.each(KT.repo_status, function (repo_id, status) {
351
- if (status.is_running) {
352
- ids.push(repo_id);
353
- KT.content.draw_syncing(repo_id, status.progress.progress, status.sync_id);
354
- }
355
- });
356
- KT.content.reset_products(KT.repo_status);
357
- KT.content_actions.addSyncing(ids);
361
+ KT.content.populateRepoStatus();
358
362
 
359
363
  $("#select_all").click(KT.content.select_all);
360
364
  $("#select_none").click(KT.content.select_none);
@@ -19,8 +19,8 @@ module Katello
19
19
  api :GET, "/environments/:environment_id/activation_keys"
20
20
  api :GET, "/organizations/:organization_id/activation_keys"
21
21
  param :organization_id, :number, :desc => N_("organization identifier"), :required => true
22
- param :environment_id, :number, :desc => N_("environment identifier")
23
- param :content_view_id, :number, :desc => N_("content view identifier")
22
+ param :environment_id, :number, :desc => N_("environment identifier"), :allow_nil => true
23
+ param :content_view_id, :number, :desc => N_("content view identifier"), :allow_nil => true
24
24
  param :name, String, :desc => N_("activation key name to filter by")
25
25
  param_group :search, Api::V2::ApiController
26
26
  add_scoped_search_description_for(ActivationKey)
@@ -50,6 +50,7 @@ module Katello
50
50
  param :id, :number, :desc => N_("organization ID"), :required => true
51
51
  def show
52
52
  @render_template = 'katello/api/v2/organizations/show'
53
+ @organization.manifest_expiration_date(cached: false) if params[:force_manifest_expire_cache]
53
54
  super
54
55
  end
55
56
 
@@ -5,11 +5,12 @@ module Actions
5
5
  def plan(root, relative_path = nil)
6
6
  begin
7
7
  root.save!
8
- rescue ActiveRecord::RecordInvalid
9
- if root.is_container_push
8
+ rescue ActiveRecord::RecordInvalid => e
9
+ if root.is_container_push && e.message.include?("Container Repository Name") && e.message.include?("conflicts with an existing repository")
10
10
  logger.warn("Skipping repository creation as container push repository already exists: #{root.container_push_name}")
11
11
  return
12
12
  end
13
+ raise e
13
14
  end
14
15
  repository = ::Katello::Repository.new(:environment => root.organization.library,
15
16
  :content_view_version => root.organization.library.default_content_view_version,
@@ -70,11 +70,7 @@ module Actions
70
70
  # Remove products from ACS's that contain no repositories which both
71
71
  # match the ACS content type and have a non-nil URL
72
72
  product = repository.product
73
- repo_content_types = Set.new
74
- product.repositories.each do |test_repo|
75
- # we need to check id because test_repo will still contain the old, non-nil url
76
- repo_content_types.add(test_repo.content_type) if (repository.id != test_repo.id) && test_repo.url.present?
77
- end
73
+ repo_content_types = ::Katello::RootRepository.where(:id => product.repositories.where.not(:id => repository.id).select(:root_id)).where.not(:url => [nil, '']).distinct.pluck(:content_type)
78
74
  ::Katello::AlternateContentSource.with_products(product).each do |acs|
79
75
  unless repo_content_types.include?(acs.content_type)
80
76
  acs.products = acs.products - [product]
@@ -91,11 +91,7 @@ module Actions
91
91
  # Remove products from ACS's that contain no repositories which both
92
92
  # match the ACS content type and have a non-nil URL
93
93
  product = repository.product
94
- repo_content_types = Set.new
95
- product.acs_compatible_repositories.each do |test_repo|
96
- # we need to check id because test_repo will still contain the old, non-nil url
97
- repo_content_types.add(test_repo.content_type) if (repository.id != test_repo.id) && test_repo.url.present?
98
- end
94
+ repo_content_types = ::Katello::RootRepository.where(:id => product.repositories.where.not(:id => repository.id).select(:root_id)).where.not(:url => [nil, '']).distinct.pluck(:content_type)
99
95
  ::Katello::AlternateContentSource.with_products(product).each do |acs|
100
96
  unless repo_content_types.include?(acs.content_type)
101
97
  acs.products = acs.products - [product]
@@ -14,7 +14,11 @@ module Actions
14
14
  to_delete = content_view.repository_references.select do |repository_reference|
15
15
  repo = repository_reference.root_repository.library_instance
16
16
  if delete_href?(repository_reference.repository_href, content_view)
17
- tasks << repo.backend_service(smart_proxy).delete_repository(repository_reference)
17
+ if repo.root.is_container_push?
18
+ tasks << repo.backend_service(smart_proxy).delete_distributions
19
+ else
20
+ tasks << repo.backend_service(smart_proxy).delete_repository(repository_reference)
21
+ end
18
22
  true
19
23
  else
20
24
  false
@@ -22,7 +26,7 @@ module Actions
22
26
  end
23
27
  to_delete.each(&:destroy)
24
28
 
25
- output[:pulp_tasks] = tasks
29
+ output[:pulp_tasks] = tasks.compact
26
30
  end
27
31
 
28
32
  #migrated composites may have the same RepositoryReference as their component
@@ -79,22 +79,14 @@ module Katello
79
79
  module ClassMethods
80
80
  def find_by_applicable_errata(_key, operator, value)
81
81
  conditions = sanitize_sql_for_conditions(["#{Katello::Erratum.table_name}.errata_id #{operator} ?", value_to_sql(operator, value)])
82
- hosts = ::Host::Managed.joins(:applicable_errata).where(conditions)
83
- if hosts.empty?
84
- { :conditions => "1=0" }
85
- else
86
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{hosts.pluck(:id).join(',')})" }
87
- end
82
+ hosts = ::Host::Managed.joins(:applicable_errata).select(:id).where(conditions)
83
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{hosts.to_sql})" }
88
84
  end
89
85
 
90
86
  def find_by_installable_errata(_key, operator, value)
91
87
  conditions = sanitize_sql_for_conditions(["#{Katello::Erratum.table_name}.errata_id #{operator} ?", value_to_sql(operator, value)])
92
- facets = Katello::Host::ContentFacet.joins_installable_errata.where(conditions)
93
- if facets.empty?
94
- { :conditions => "1=0" }
95
- else
96
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.pluck(:host_id).join(',')})" }
97
- end
88
+ facets = Katello::Host::ContentFacet.joins_installable_errata.select(:host_id).where(conditions)
89
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.to_sql})" }
98
90
  end
99
91
 
100
92
  def find_by_applicable_debs(_key, operator, value)
@@ -117,42 +109,26 @@ module Katello
117
109
 
118
110
  def find_by_applicable_rpms(_key, operator, value)
119
111
  conditions = sanitize_sql_for_conditions(["#{Katello::Rpm.table_name}.nvra #{operator} ?", value_to_sql(operator, value)])
120
- hosts = ::Host::Managed.joins(:applicable_rpms).where(conditions)
121
- if hosts.empty?
122
- { :conditions => "1=0" }
123
- else
124
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{hosts.pluck(:id).join(',')})" }
125
- end
112
+ hosts = ::Host::Managed.joins(:applicable_rpms).select(:id).where(conditions)
113
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{hosts.to_sql})" }
126
114
  end
127
115
 
128
116
  def find_by_installable_rpms(_key, operator, value)
129
117
  conditions = sanitize_sql_for_conditions(["#{Katello::Rpm.table_name}.nvra #{operator} ?", value_to_sql(operator, value)])
130
- facets = Katello::Host::ContentFacet.joins_installable_rpms.where(conditions)
131
- if facets.empty?
132
- { :conditions => "1=0" }
133
- else
134
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.pluck(:host_id).join(',')})" }
135
- end
118
+ facets = Katello::Host::ContentFacet.joins_installable_rpms.select(:host_id).where(conditions)
119
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.to_sql})" }
136
120
  end
137
121
 
138
122
  def find_by_repository_content_label(_key, operator, value)
139
123
  conditions = sanitize_sql_for_conditions(["#{Katello::Content.table_name}.label #{operator} ?", value_to_sql(operator, value)])
140
- facets = Katello::Host::ContentFacet.joins_repositories.where(conditions)
141
- if facets.empty?
142
- { :conditions => "1=0" }
143
- else
144
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.pluck(:host_id).join(',')})" }
145
- end
124
+ facets = Katello::Host::ContentFacet.joins_repositories.select(:host_id).where(conditions)
125
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.to_sql})" }
146
126
  end
147
127
 
148
128
  def find_by_repository_name(_key, operator, value)
149
129
  conditions = sanitize_sql_for_conditions(["#{Katello::RootRepository.table_name}.name #{operator} ?", value_to_sql(operator, value)])
150
- facets = Katello::Host::ContentFacet.joins_repositories.where(conditions)
151
- if facets.empty?
152
- { :conditions => "1=0" }
153
- else
154
- { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.pluck(:host_id).join(',')})" }
155
- end
130
+ facets = Katello::Host::ContentFacet.joins_repositories.select(:host_id).where(conditions)
131
+ { :conditions => "#{::Host::Managed.table_name}.id IN (#{facets.to_sql})" }
156
132
  end
157
133
 
158
134
  def in_content_view_environments(content_views: nil, lifecycle_environments: nil)
@@ -511,17 +511,17 @@ module Katello
511
511
  actions = %w(install remove update).freeze
512
512
  case action
513
513
  when 'install'
514
- yum_installable = ::Katello::Rpm.yum_installable_for_host(self).search_for(search).distinct.pluck(:name)
514
+ yum_installable = ::Katello::Rpm.search_for(search).distinct.pluck(:name)
515
515
  if yum_installable.empty?
516
- fail N_("No available packages found for search term '%s'. Check the host's content view environments and already-installed packages.") % search
516
+ fail N_("No available packages found for search term '%s'.") % search
517
517
  end
518
518
  yum_installable
519
519
  when 'remove'
520
520
  return [] if search.empty?
521
521
 
522
- yum_removable = installed_packages.search_for(search).distinct.pluck(:name)
522
+ yum_removable = ::Katello::InstalledPackage.search_for(search).distinct.pluck(:name)
523
523
  if yum_removable.empty?
524
- fail N_("Cannot remove package(s): This host does not have any installed packages matching the search term '%s'.") % search
524
+ fail N_("Cannot remove package(s): No installed packages found for search term '%s'.") % search
525
525
  end
526
526
  yum_removable
527
527
  when 'update'
@@ -536,14 +536,15 @@ module Katello
536
536
  end
537
537
  pkg_name_archs = installed_packages.search_for(search).distinct.pluck(:name, :arch)
538
538
  if pkg_name_archs.empty?
539
- fail _("Cannot upgrade packages: No installed packages found for search term '%s'") % search
539
+ fail _("Cannot upgrade packages: No installed packages found for search term '%s'.") % search
540
540
  end
541
- upgrades = ::Katello::Rpm.installable_for_hosts([self]).select(:id, :name, :arch, :nvra, :evr).order(evr: :desc).group_by { |i| [i.name, i.arch] }
542
- result = pkg_name_archs.map { |name, arch| versions_by_name_arch[[name, arch]] || upgrades[[name, arch]]&.first&.nvra }.compact
543
- if result.empty?
544
- fail _("No upgradable packages found for search term '%s'. The host may already have the latest version(s) installed.") % search
541
+ versionless_upgrades = ::Katello::Rpm.where(name: pkg_name_archs.map(&:first)).select(:id, :name, :arch, :evr).order(evr: :desc).group_by { |i| [i.name, i.arch] }
542
+ # Use versions_by_name_arch if a version is specified, otherwise use the latest version. If using the latest version, upgrade by name only, not by name and arch.
543
+ pkg_names_and_nvras = pkg_name_archs.map { |name, arch| versions_by_name_arch[[name, arch]] || versionless_upgrades[[name, arch]]&.first&.name }.compact
544
+ if pkg_names_and_nvras.empty?
545
+ fail _("No upgradable packages found for search term '%s'.") % search
545
546
  end
546
- result
547
+ pkg_names_and_nvras
547
548
  else
548
549
  fail ::Foreman::Exception.new(N_("package_names_for_job_template: Action must be one of %s"), actions.join(', '))
549
550
  end
@@ -554,7 +555,7 @@ module Katello
554
555
  actions = %w(install remove update).freeze
555
556
  case action
556
557
  when 'install'
557
- deb_installable = ::Katello::Deb.apt_installable_for_host(self).search_for(search).distinct.pluck(:name)
558
+ deb_installable = ::Katello::Deb.search_for(search).distinct.pluck(:name)
558
559
  if deb_installable.empty?
559
560
  fail _("No available debs found for search term '%s'. Check the host's content view environments and already-installed debs.") % search
560
561
  end
@@ -562,10 +563,10 @@ module Katello
562
563
  when 'remove'
563
564
  return [] if search.empty?
564
565
 
565
- installed_debs.search_for(search).distinct.pluck(:name)
566
+ ::Katello::InstalledDeb.search_for(search).distinct.pluck(:name)
566
567
  when 'update'
567
568
  return [] if search.empty?
568
- deb_results = installed_debs.search_for(search).distinct.pluck(:name)
569
+ deb_results = ::Katello::InstalledDeb.search_for(search).distinct.pluck(:name)
569
570
  if deb_results.empty?
570
571
  fail _("No installed debs found for search term '%s'") % search
571
572
  end
@@ -575,10 +576,11 @@ module Katello
575
576
  end
576
577
  end
577
578
 
578
- def advisory_ids(search:)
579
- ids = ::Katello::Erratum.installable_for_hosts([self]).search_for(search).pluck(:errata_id)
579
+ def advisory_ids(search:, check_installable_for_host: true)
580
+ errata_scope = check_installable_for_host ? ::Katello::Erratum.installable_for_hosts([self]) : ::Katello::Erratum
581
+ ids = errata_scope.search_for(search).pluck(:errata_id)
580
582
  if ids.empty?
581
- fail _("Cannot install errata: No installable errata found for search term '%s'") % search
583
+ fail _("Cannot install errata: No errata found for search term '%s'") % search
582
584
  end
583
585
  ids
584
586
  end
@@ -158,7 +158,7 @@ module Katello
158
158
  { :id => cve.content_view.cp_environment_id(cve.lifecycle_environment) }
159
159
  end
160
160
  else
161
- self.host.organization.default_content_view.cp_environment_id(self.host.organization.library)
161
+ [{ :id => self.host.organization.default_content_view.cp_environment_id(self.host.organization.library) }]
162
162
  end
163
163
  end
164
164
 
@@ -15,7 +15,7 @@ foreign_input_sets:
15
15
  exclude: action,package
16
16
  %>
17
17
 
18
- <% advisory_ids = @host.advisory_ids(search: input("Errata search query")) -%>
18
+ <% advisory_ids = @host.advisory_ids(search: input("Errata search query"), check_installable_for_host: false) -%>
19
19
  <% render_error(N_("No errata matching given search query")) if !input("Errata search query").blank? && advisory_ids.blank? -%>
20
20
  # RESOLVED_ERRATA_IDS=<%= advisory_ids.join(',') %>
21
21
 
@@ -12,7 +12,7 @@ template_inputs:
12
12
  required: false
13
13
  %>
14
14
 
15
- <% advisory_ids = @host.advisory_ids(search: input("Errata search query")) -%>
15
+ <% advisory_ids = @host.advisory_ids(search: input("Errata search query"), check_installable_for_host: false) -%>
16
16
  <% render_error(N_("No errata matching given search query")) if !input("Errata search query").blank? && advisory_ids.blank? -%>
17
17
  # RESOLVED_ERRATA_IDS=<%= advisory_ids.join(',') %>
18
18
 
@@ -13,6 +13,7 @@ attributes :generated_for
13
13
  attributes :related_cv_count
14
14
  attributes :related_composite_cvs
15
15
  attributes :filtered? => :filtered
16
+ attributes :needs_publish? => :needs_publish
16
17
 
17
18
  node :next_version do |content_view|
18
19
  content_view.next_version.to_f.to_s
@@ -3,7 +3,6 @@ object @resource
3
3
  extends "katello/api/v2/content_views/base"
4
4
 
5
5
  attributes :content_host_count
6
- attributes :needs_publish? => :needs_publish
7
6
 
8
7
  node :errors do
9
8
  unless @resource.valid?
@@ -8,9 +8,9 @@
8
8
  "complete": "<%= escape_javascript(_('Sync complete.')) %>",
9
9
  "no_start_time": "<%= escape_javascript(_('No start time currently available.')) %>"
10
10
  });
11
-
12
- KT.repo_status = $.parseJSON('<%= escape_javascript(@repo_status.to_json.html_safe) %>');
11
+ KT.repo_status = JSON.parse('<%= escape_javascript(@repo_status.to_json.html_safe) %>');
13
12
  KT.permissions = { "syncable" : <%= any_syncable? %> };
13
+ KT.content.populateRepoStatus();
14
14
  </script>
15
15
  <% end -%>
16
16
 
@@ -5,6 +5,10 @@
5
5
  * @description
6
6
  * Module for internationalization.
7
7
  */
8
+ var loadAngularJSi18n = new Event('loadAngularJSi18n');
9
+
8
10
  angular.module('Bastion.i18n', [
9
11
  'gettext'
10
12
  ]);
13
+
14
+ document.dispatchEvent(loadAngularJSi18n);
@@ -1,3 +1,5 @@
1
+ var loadAngularJSgettext = new Event('loadAngularJSgettext');
2
+
1
3
  angular.module('gettext', []);
2
4
  angular.module('gettext').constant('gettext', function (str) {
3
5
  /*
@@ -342,4 +344,6 @@ angular.module('gettext').factory('gettextPlurals', function () {
342
344
  return n != 1 ? 1 : 0;
343
345
  }
344
346
  };
345
- });
347
+ });
348
+
349
+ document.dispatchEvent(loadAngularJSgettext);
@@ -39,7 +39,6 @@ angular.module('Bastion.content-hosts').service('ContentHostsModalHelper', ['$ui
39
39
  $uibModal.open({
40
40
  templateUrl: 'content-hosts/bulk/views/content-hosts-bulk-errata-modal.html',
41
41
  controller: 'ContentHostsBulkErrataModalController',
42
- openedClass: 'bastion',
43
42
  size: 'lg',
44
43
  resolve: {
45
44
  hostIds: this.resolveFunc()
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "4.14.0".freeze
2
+ VERSION = "4.14.2".freeze
3
3
  end
@@ -20,23 +20,23 @@ const recommendedRepositoriesRHEL = [
20
20
  'rhel-8-for-x86_64-appstream-kickstart',
21
21
  'rhel-8-for-x86_64-baseos-eus-rpms',
22
22
  'rhel-8-for-x86_64-appstream-eus-rpms',
23
- 'rhel-7-server-rpms',
24
- 'rhel-7-server-optional-rpms',
25
- 'rhel-7-server-extras-rpms',
26
- 'rhel-7-server-kickstart',
23
+ 'rhel-7-server-els-rpms',
24
+ 'rhel-7-server-els-optional-rpms',
27
25
  ];
28
26
 
29
27
  const recommendedRepositoriesSatTools = [
30
28
  'satellite-client-6-for-rhel-9-x86_64-rpms',
31
29
  'satellite-client-6-for-rhel-8-x86_64-rpms',
32
- 'rhel-7-server-satellite-client-6-rpms',
33
- 'rhel-6-server-els-satellite-client-6-rpms',
30
+ 'rhel-7-server-els-satellite-client-6-rpms',
34
31
  ];
35
32
 
36
33
  const recommendedRepositoriesMisc = [
37
- 'satellite-capsule-6.15-for-rhel-8-x86_64-rpms',
38
- 'satellite-maintenance-6.15-for-rhel-8-x86_64-rpms',
39
- 'satellite-utils-6.15-for-rhel-8-x86_64-rpms',
34
+ 'satellite-capsule-6.16-for-rhel-8-x86_64-rpms',
35
+ 'satellite-maintenance-6.16-for-rhel-8-x86_64-rpms',
36
+ 'satellite-utils-6.16-for-rhel-8-x86_64-rpms',
37
+ 'satellite-utils-6.16-for-rhel-9-x86_64-rpms',
38
+ 'satellite-maintenance-6.16-for-rhel-9-x86_64-rpms',
39
+ 'satellite-capsule-6.16-for-rhel-9-x86_64-rpms',
40
40
  ];
41
41
 
42
42
  const recommendedRepositorySetLables = recommendedRepositoriesRHEL
@@ -4,7 +4,7 @@ import { Grid, Col, Row, Tabs, Tab, FormControl, ControlLabel } from 'react-boot
4
4
  import { FormattedMessage } from 'react-intl';
5
5
  import { Button, Spinner } from 'patternfly-react';
6
6
  import { Alert } from '@patternfly/react-core';
7
- import { propsToCamelCase } from 'foremanReact/common/helpers';
7
+ import { propsToCamelCase, getDocsURL } from 'foremanReact/common/helpers';
8
8
  import ForemanModal from 'foremanReact/components/ForemanModal';
9
9
  import Slot from 'foremanReact/components/common/Slot';
10
10
  import { translate as __ } from 'foremanReact/common/I18n';
@@ -12,6 +12,7 @@ import TooltipButton from '../../../components/TooltipButton';
12
12
  import { LoadingState } from '../../../components/LoadingState';
13
13
  import { Table } from '../../../components/pf3Table';
14
14
 
15
+
15
16
  import { columns } from './ManifestHistoryTableSchema';
16
17
  import DeleteManifestModalText from './DeleteManifestModalText';
17
18
  import { MANAGE_MANIFEST_MODAL_ID, DELETE_MANIFEST_MODAL_ID } from './ManifestConstants';
@@ -32,7 +33,7 @@ class ManageManifestModal extends Component {
32
33
  }
33
34
 
34
35
  if (prevProps.taskInProgress && !this.props.taskInProgress) {
35
- this.props.loadOrganization();
36
+ this.props.loadOrganization({ force_manifest_expire_cache: true });
36
37
  this.props.loadManifestHistory();
37
38
  }
38
39
 
@@ -111,8 +112,9 @@ class ManageManifestModal extends Component {
111
112
  header: __('There is no manifest history to display.'),
112
113
  description: __('Import a manifest using the Manifest tab above.'),
113
114
  documentation: {
114
- label: __('Learn more about adding subscription manifests '),
115
- url: 'https://access.redhat.com/solutions/3410771',
115
+ label: __('Learn more about adding subscription manifests in '),
116
+ buttonLabel: __('the documentation.'),
117
+ url: getDocsURL('Managing_Content', 'Managing_Red_Hat_Subscriptions_content-management'),
116
118
  },
117
119
  });
118
120
 
@@ -204,7 +204,7 @@ class SubscriptionsPage extends Component {
204
204
  description: __('Add subscriptions using the Add Subscriptions button.'),
205
205
  action: {
206
206
  title: __('Add subscriptions'),
207
- url: 'subscriptions/add',
207
+ url: '/subscriptions/add',
208
208
  },
209
209
  }
210
210
  : {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.14.0
4
+ version: 4.14.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - N/A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-17 00:00:00.000000000 Z
11
+ date: 2024-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails