katello 4.18.0.rc2 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/locale/bn/katello.js +279 -15
  3. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +279 -15
  4. data/app/assets/javascripts/katello/locale/ca/katello.js +281 -17
  5. data/app/assets/javascripts/katello/locale/cs/katello.js +280 -16
  6. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +282 -18
  7. data/app/assets/javascripts/katello/locale/de/katello.js +290 -26
  8. data/app/assets/javascripts/katello/locale/de_AT/katello.js +279 -15
  9. data/app/assets/javascripts/katello/locale/de_DE/katello.js +281 -17
  10. data/app/assets/javascripts/katello/locale/el/katello.js +281 -17
  11. data/app/assets/javascripts/katello/locale/en/katello.js +280 -16
  12. data/app/assets/javascripts/katello/locale/en_GB/katello.js +280 -16
  13. data/app/assets/javascripts/katello/locale/en_US/katello.js +279 -15
  14. data/app/assets/javascripts/katello/locale/es/katello.js +445 -181
  15. data/app/assets/javascripts/katello/locale/et_EE/katello.js +279 -15
  16. data/app/assets/javascripts/katello/locale/fr/katello.js +1097 -833
  17. data/app/assets/javascripts/katello/locale/gl/katello.js +279 -15
  18. data/app/assets/javascripts/katello/locale/gu/katello.js +279 -15
  19. data/app/assets/javascripts/katello/locale/he_IL/katello.js +279 -15
  20. data/app/assets/javascripts/katello/locale/hi/katello.js +279 -15
  21. data/app/assets/javascripts/katello/locale/id/katello.js +279 -15
  22. data/app/assets/javascripts/katello/locale/it/katello.js +281 -17
  23. data/app/assets/javascripts/katello/locale/ja/katello.js +826 -562
  24. data/app/assets/javascripts/katello/locale/ka/katello.js +677 -413
  25. data/app/assets/javascripts/katello/locale/kn/katello.js +279 -15
  26. data/app/assets/javascripts/katello/locale/ko/katello.js +2325 -2062
  27. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +279 -15
  28. data/app/assets/javascripts/katello/locale/mr/katello.js +279 -15
  29. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +279 -15
  30. data/app/assets/javascripts/katello/locale/or/katello.js +279 -15
  31. data/app/assets/javascripts/katello/locale/pa/katello.js +279 -15
  32. data/app/assets/javascripts/katello/locale/pl/katello.js +281 -17
  33. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +279 -15
  34. data/app/assets/javascripts/katello/locale/pt/katello.js +279 -15
  35. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +458 -194
  36. data/app/assets/javascripts/katello/locale/ro/katello.js +279 -15
  37. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +279 -15
  38. data/app/assets/javascripts/katello/locale/ru/katello.js +281 -17
  39. data/app/assets/javascripts/katello/locale/sl/katello.js +281 -17
  40. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +279 -15
  41. data/app/assets/javascripts/katello/locale/ta/katello.js +279 -15
  42. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +279 -15
  43. data/app/assets/javascripts/katello/locale/te/katello.js +279 -15
  44. data/app/assets/javascripts/katello/locale/tr/katello.js +279 -15
  45. data/app/assets/javascripts/katello/locale/vi/katello.js +279 -15
  46. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +279 -15
  47. data/app/assets/javascripts/katello/locale/zh/katello.js +279 -15
  48. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +831 -567
  49. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +281 -17
  50. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +2 -2
  51. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +69 -19
  52. data/app/controllers/katello/api/v2/exports_controller.rb +14 -7
  53. data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +9 -0
  54. data/app/controllers/katello/api/v2/host_errata_controller.rb +24 -2
  55. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -4
  56. data/app/controllers/katello/api/v2/repositories_controller.rb +12 -3
  57. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +36 -8
  58. data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +9 -1
  59. data/app/lib/actions/katello/repository/destroy.rb +3 -2
  60. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +1 -2
  61. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +1 -2
  62. data/app/lib/katello/errors.rb +2 -0
  63. data/app/models/katello/content_view_environment.rb +3 -0
  64. data/app/models/katello/rhel_lifecycle_status.rb +3 -1
  65. data/app/services/katello/pulp3/content_view_version/export.rb +32 -25
  66. data/app/services/katello/pulp3/content_view_version/export_validator.rb +1 -1
  67. data/app/views/katello/api/v2/content_facet/base.json.rabl +3 -0
  68. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata-type.filter.js +1 -1
  69. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +8 -0
  70. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +6 -5
  71. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +6 -5
  72. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +6 -5
  73. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +6 -5
  74. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +6 -5
  75. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +6 -5
  76. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +6 -5
  77. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +6 -5
  78. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +6 -5
  79. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +6 -5
  80. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +6 -5
  81. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +6 -5
  82. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +6 -5
  83. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +6 -5
  84. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +6 -5
  85. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +6 -5
  86. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +6 -5
  87. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +6 -5
  88. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +6 -5
  89. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +6 -5
  90. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +6 -5
  91. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +6 -5
  92. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +6 -5
  93. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +6 -5
  94. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +6 -5
  95. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +6 -5
  96. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +6 -5
  97. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +6 -5
  98. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +6 -5
  99. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +6 -5
  100. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +6 -5
  101. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +6 -5
  102. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +6 -5
  103. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +6 -5
  104. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +6 -5
  105. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +6 -5
  106. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +6 -5
  107. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +6 -5
  108. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +6 -5
  109. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +6 -5
  110. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +6 -5
  111. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +6 -5
  112. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +6 -5
  113. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +6 -5
  114. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +6 -5
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +6 -5
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +11 -11
  117. data/lib/katello/plugin.rb +6 -0
  118. data/lib/katello/tasks/repository.rake +67 -0
  119. data/lib/katello/version.rb +1 -1
  120. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  121. data/locale/bn/katello.po +279 -15
  122. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  123. data/locale/bn_IN/katello.po +279 -15
  124. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  125. data/locale/ca/katello.po +282 -18
  126. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  127. data/locale/cs/katello.po +280 -17
  128. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  129. data/locale/cs_CZ/katello.po +283 -19
  130. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  131. data/locale/de/katello.po +295 -31
  132. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  133. data/locale/de_AT/katello.po +279 -15
  134. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  135. data/locale/de_DE/katello.po +282 -18
  136. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  137. data/locale/el/katello.po +282 -18
  138. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  139. data/locale/en/katello.po +280 -17
  140. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  141. data/locale/en_GB/katello.po +280 -16
  142. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  143. data/locale/en_US/katello.po +279 -15
  144. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  145. data/locale/es/katello.po +449 -184
  146. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  147. data/locale/et_EE/katello.po +279 -15
  148. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  149. data/locale/fr/katello.po +1103 -840
  150. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  151. data/locale/gl/katello.po +279 -15
  152. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  153. data/locale/gu/katello.po +279 -15
  154. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  155. data/locale/he_IL/katello.po +279 -15
  156. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  157. data/locale/hi/katello.po +279 -15
  158. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  159. data/locale/id/katello.po +279 -15
  160. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  161. data/locale/it/katello.po +282 -18
  162. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  163. data/locale/ja/katello.po +833 -568
  164. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  165. data/locale/ka/katello.po +679 -413
  166. data/locale/katello.pot +775 -359
  167. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  168. data/locale/kn/katello.po +279 -15
  169. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  170. data/locale/ko/katello.po +2334 -2058
  171. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  172. data/locale/ml_IN/katello.po +279 -15
  173. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  174. data/locale/mr/katello.po +279 -15
  175. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  176. data/locale/nl_NL/katello.po +279 -15
  177. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  178. data/locale/or/katello.po +279 -15
  179. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  180. data/locale/pa/katello.po +279 -15
  181. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  182. data/locale/pl/katello.po +282 -18
  183. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  184. data/locale/pl_PL/katello.po +279 -15
  185. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/pt/katello.po +279 -15
  187. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  188. data/locale/pt_BR/katello.po +462 -197
  189. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  190. data/locale/ro/katello.po +279 -15
  191. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  192. data/locale/ro_RO/katello.po +279 -15
  193. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  194. data/locale/ru/katello.po +282 -18
  195. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  196. data/locale/sl/katello.po +282 -18
  197. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  198. data/locale/sv_SE/katello.po +279 -15
  199. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/ta/katello.po +279 -15
  201. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  202. data/locale/ta_IN/katello.po +279 -15
  203. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  204. data/locale/te/katello.po +279 -15
  205. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/tr/katello.po +279 -15
  207. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  208. data/locale/vi/katello.po +279 -15
  209. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  210. data/locale/vi_VN/katello.po +279 -15
  211. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/zh/katello.po +279 -15
  213. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  214. data/locale/zh_CN/katello.po +836 -567
  215. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  216. data/locale/zh_TW/katello.po +282 -18
  217. data/webpack/components/Errata/index.js +18 -0
  218. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataConstants.js +3 -0
  219. data/webpack/global_index.js +0 -4
  220. data/webpack/redux/actions/RedHatRepositories/helpers.js +3 -3
  221. data/webpack/redux/reducers/index.js +0 -2
  222. metadata +4 -16
  223. data/webpack/components/extensions/about/SystemStatuses.js +0 -55
  224. data/webpack/components/extensions/about/SystemStatusesActions.js +0 -16
  225. data/webpack/components/extensions/about/SystemStatusesConsts.js +0 -3
  226. data/webpack/components/extensions/about/SystemStatusesReducer.js +0 -26
  227. data/webpack/components/extensions/about/SystemStatusesSelectors.js +0 -3
  228. data/webpack/components/extensions/about/__tests__/SystemStatuses.fixtures.js +0 -20
  229. data/webpack/components/extensions/about/__tests__/SystemStatuses.test.js +0 -14
  230. data/webpack/components/extensions/about/__tests__/SystemStatusesReducer.test.js +0 -32
  231. data/webpack/components/extensions/about/__tests__/__snapshots__/SystemStatuses.test.js.snap +0 -156
  232. data/webpack/components/extensions/about/__tests__/__snapshots__/SystemStatusesReducer.test.js.snap +0 -47
  233. data/webpack/components/extensions/about/index.js +0 -19
  234. data/webpack/components/extensions/reducers.js +0 -6
@@ -517,11 +517,11 @@ module Katello
517
517
  PersonalAccessToken.transaction do
518
518
  personal_token = PersonalAccessToken.where(user_id: User.current.id, name: 'registry').first
519
519
  if personal_token.nil?
520
- personal_token = PersonalAccessToken.new(user: User.current, name: 'registry', expires_at: 6.minutes.from_now)
520
+ personal_token = PersonalAccessToken.new(user: User.current, name: 'registry', expires_at: Setting['registry_token_expiration_minutes'].minutes.from_now)
521
521
  personal_token.generate_token
522
522
  personal_token.save!
523
523
  else
524
- personal_token.expires_at = 6.minutes.from_now
524
+ personal_token.expires_at = Setting['registry_token_expiration_minutes'].minutes.from_now
525
525
  personal_token.save!
526
526
  end
527
527
  rescue ActiveRecord::RecordInvalid
@@ -1,11 +1,12 @@
1
1
  module Katello
2
2
  class Api::V2::ContentExportIncrementalsController < Api::V2::ExportsController
3
- before_action :find_exportable_organization, :only => [:library]
4
- before_action :find_exportable_content_view_version, :only => [:version]
5
- before_action :find_exportable_repository, :only => [:repository]
6
- before_action :find_library_export_view, :only => [:library]
7
- before_action :find_repository_export_view, :only => [:repository]
8
- before_action :find_history, :only => [:version, :library, :repository]
3
+ before_action :find_exportable_content_view_version, :only => [:version] # determines @view
4
+ before_action :find_exportable_organization, :only => [:library] # determines @organization
5
+ before_action :find_library_export_view, :only => [:library] # determines @view from @organization
6
+ before_action :find_exportable_repository, :only => [:repository] # finds @repository
7
+ before_action :find_repository_export_view, :only => [:repository] # determines @view from @repository
8
+ before_action :find_incremental_history, :only => [:version, :library, :repository] # determines @history from @view
9
+ before_action :determine_export_format_from_history, :only => [:version, :library, :repository] # determines @export_format from @history
9
10
 
10
11
  def_param_group :incremental do
11
12
  param :from_history_id, :number, :desc => N_("Export history identifier used for incremental export. "\
@@ -42,25 +43,74 @@ module Katello
42
43
 
43
44
  private
44
45
 
46
+ def find_export_view_helper(name_importable, name_syncable, organization, generated_for_importable, generated_for_syncable)
47
+ if params[:from_history_id].present?
48
+ find_incremental_history_from_id
49
+ @view = @history&.content_view_version&.content_view
50
+ else
51
+ importable_result = nil
52
+ syncable_result = nil
53
+ unless params[:format].present? && params[:format] == ::Katello::Pulp3::ContentViewVersion::Export::SYNCABLE
54
+ importable_result = determine_view_from_name(name_importable,
55
+ organization,
56
+ generated_for_importable)
57
+ end
58
+ unless params[:format].present? && params[:format] == ::Katello::Pulp3::ContentViewVersion::Export::IMPORTABLE
59
+ syncable_result = determine_view_from_name(name_syncable,
60
+ organization,
61
+ generated_for_syncable)
62
+ end
63
+ @view = [importable_result, syncable_result].compact.max_by(&:updated_at)
64
+ end
65
+ check_for_blank_view
66
+ end
67
+
45
68
  def find_library_export_view
46
- @view = ::Katello::Pulp3::ContentViewVersion::Export.find_library_export_view(destination_server: params[:destination_server],
47
- organization: @organization,
48
- format: find_export_format,
49
- create_by_default: false)
69
+ find_export_view_helper(
70
+ ::Katello::ContentView::EXPORT_LIBRARY,
71
+ "#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE",
72
+ @organization,
73
+ :library_export,
74
+ :library_export_syncable
75
+ )
76
+ end
77
+
78
+ def find_repository_export_view
79
+ find_export_view_helper(
80
+ "Export-#{@repository.label}-#{@repository.library_instance_or_self.id}",
81
+ "Export-SYNCABLE-#{@repository.label}-#{@repository.library_instance_or_self.id}",
82
+ @repository.organization,
83
+ :repository_export,
84
+ :repository_export_syncable
85
+ )
86
+ end
87
+
88
+ def determine_view_from_name(name, organization, generated_for)
89
+ ::Katello::ContentView.where(name: name,
90
+ organization: organization,
91
+ generated_for: generated_for).first
92
+ end
93
+
94
+ def check_for_blank_view
50
95
  if @view.blank?
51
- msg = _("Unable to incrementally export. Do a Full Export on the library content "\
52
- "before updating from the latest increment.")
96
+ valid_params = ""
97
+ valid_params << " 'from_history_id':#{params[:from_history_id]}" if params[:from_history_id].present?
98
+ valid_params << " 'format':#{params[:format]}" if params[:format].present?
99
+ if valid_params.blank?
100
+ msg = _("Unable to find a base content view to use for incremental export. Please run a complete export instead.")
101
+ else
102
+ msg = _("Unable to find a base content view to use for incremental export using the provided parameters:%{params}") % { params: valid_params }
103
+ end
53
104
  fail HttpErrors::BadRequest, msg
54
105
  end
55
106
  end
56
107
 
57
- def find_repository_export_view
58
- @view = ::Katello::Pulp3::ContentViewVersion::Export.find_repository_export_view(
59
- repository: @repository,
60
- create_by_default: false,
61
- format: find_export_format)
62
- if @view.blank?
63
- msg = _("Unable to incrementally export. Do a Full Export on the repository content.")
108
+ def determine_export_format_from_history
109
+ @export_format = @history.metadata[:format]
110
+
111
+ if params[:format].present? && @export_format != params[:format]
112
+ msg = _("The provided incremental export format '%{provided}' must match the previous export's format '%{previous}'. "\
113
+ "Consider using 'from_history_id' to point to a matching export.") % { provided: params[:format], previous: @export_format }
64
114
  fail HttpErrors::BadRequest, msg
65
115
  end
66
116
  end
@@ -75,7 +75,9 @@ module Katello
75
75
  end
76
76
 
77
77
  def find_export_format
78
- if params[:format]
78
+ if @export_format.present?
79
+ @export_format
80
+ elsif params[:format]
79
81
  unless ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.include?(params[:format])
80
82
  fail HttpErrors::UnprocessableEntity, _('Invalid export format provided. Format must be one of %s ') %
81
83
  ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.join(',')
@@ -113,14 +115,11 @@ module Katello
113
115
  end
114
116
  end
115
117
 
116
- def find_history
118
+ def find_incremental_history
117
119
  if params[:from_history_id].present?
118
- @history = ::Katello::ContentViewVersionExportHistory.find(params[:from_history_id])
119
- if @history.blank?
120
- throw_resource_not_found(name: 'export history',
121
- id: params[:from_history_id])
122
- end
120
+ find_incremental_history_from_id
123
121
  else
122
+ # Use the latest export
124
123
  @history = ::Katello::ContentViewVersionExportHistory.
125
124
  latest(@view, destination_server: params[:destination_server])
126
125
  if @history.blank?
@@ -129,5 +128,13 @@ module Katello
129
128
  end
130
129
  end
131
130
  end
131
+
132
+ def find_incremental_history_from_id
133
+ @history = ::Katello::ContentViewVersionExportHistory.find(params[:from_history_id])
134
+ if @history.blank?
135
+ throw_resource_not_found(name: 'export history',
136
+ id: params[:from_history_id])
137
+ end
138
+ end
132
139
  end
133
140
  end
@@ -56,6 +56,7 @@ module Katello
56
56
  param :product_name, String, :desc => N_("Name of the product to mirror the remote repository to")
57
57
  param :organization_id, :number, :desc => N_("organization identifier")
58
58
  def mirror
59
+ validate_product_for_mirroring
59
60
  task = async_task(::Actions::Katello::Flatpak::MirrorRemoteRepository, @flatpak_remote_repository, @product)
60
61
  respond_for_async :resource => task
61
62
  end
@@ -94,5 +95,13 @@ module Katello
94
95
  def rejected_autocomplete_items
95
96
  ['flatpak_remote_id', 'flatpak_remote']
96
97
  end
98
+
99
+ private
100
+
101
+ def validate_product_for_mirroring
102
+ return unless @product&.redhat?
103
+ msg = _("Flatpak repositories cannot be mirrored into Red Hat products. Please select a custom product.")
104
+ fail HttpErrors::UnprocessableEntity, msg
105
+ end
97
106
  end
98
107
  end
@@ -7,6 +7,7 @@ module Katello
7
7
  bugfix: Katello::Erratum::BUGZILLA, # ['bugfix', 'recommended']
8
8
  security: Katello::Erratum::SECURITY, # ['security']
9
9
  enhancement: Katello::Erratum::ENHANCEMENT, # ['enhancement', 'optional']
10
+ other: 'other', # any type not in the above categories
10
11
  }.freeze
11
12
 
12
13
  before_action :find_host, only: :index
@@ -15,6 +16,8 @@ module Katello
15
16
  before_action :find_environment, only: :index
16
17
  before_action :find_content_view, only: :index
17
18
 
19
+ after_action :strip_errata_type, only: :auto_complete_search
20
+
18
21
  resource_description do
19
22
  api_version 'v2'
20
23
  api_base_url "/api"
@@ -41,7 +44,7 @@ module Katello
41
44
  param :content_view_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Content View"), :required => false
42
45
  param :environment_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Environment"), :required => false
43
46
  param :include_applicable, :bool, :desc => N_("Return errata that are applicable to this host. Defaults to false)"), :required => false
44
- param :type, String, :desc => N_("Return only errata of a particular type (security, bugfix, enhancement)"), :required => false
47
+ param :type, String, :desc => N_("Return only errata of a particular type (security, bugfix, enhancement, other)"), :required => false
45
48
  param :severity, String, :desc => N_("Return only errata of a particular severity (None, Low, Moderate, Important, Critical)"), :required => false
46
49
  param_group :search, Api::V2::ApiController
47
50
  def index
@@ -89,7 +92,12 @@ module Katello
89
92
  relation = @host.content_facet.installable_errata(@environment, @content_view)
90
93
  end
91
94
  if params[:type].present?
92
- relation = relation.where(:errata_type => TYPES_FROM_PARAMS[params[:type].to_sym])
95
+ type_param = params[:type].to_sym
96
+ if type_param == :other
97
+ relation = relation.where.not(:errata_type => [Katello::Erratum::SECURITY, Katello::Erratum::BUGZILLA, Katello::Erratum::ENHANCEMENT].flatten)
98
+ elsif TYPES_FROM_PARAMS[type_param].present?
99
+ relation = relation.where(:errata_type => TYPES_FROM_PARAMS[type_param])
100
+ end
93
101
  end
94
102
  if params[:severity].present?
95
103
  params[:severity] = ['None', ''] if params[:severity] == 'None'
@@ -142,6 +150,20 @@ module Katello
142
150
  end
143
151
  end
144
152
 
153
+ def strip_errata_type
154
+ return if response.body.blank?
155
+
156
+ begin
157
+ items = JSON.parse(response.body)
158
+ rescue JSON::ParserError
159
+ return
160
+ end
161
+
162
+ filtered = items.reject { |h| h['part'].to_s.strip == 'errata_type' }
163
+
164
+ response.body = filtered.to_json
165
+ end
166
+
145
167
  def validate_index_params!
146
168
  if (params[:content_view_id] && params[:environment_id].nil?) || (params[:environment_id] && params[:content_view_id].nil?)
147
169
  fail _("Either both parameters 'content_view_id' and 'environment_id' should be specified or neither should be specified")
@@ -4,16 +4,22 @@ module Katello
4
4
 
5
5
  include Api::V2::Rendering
6
6
  include ForemanTasks::Triggers
7
-
8
- before_action :local_find_taxonomy, :only => %w(repo_discover cancel_repo_discover
9
- download_debug_certificate cdn_configuration
10
- redhat_provider update releases)
7
+ LOCAL_FIND_TAXONOMY_ACTIONS = %w(repo_discover cancel_repo_discover download_debug_certificate
8
+ cdn_configuration redhat_provider update releases).freeze
9
+ before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
11
10
 
12
11
  resource_description do
13
12
  api_version 'v2'
14
13
  api_base_url "/katello/api"
15
14
  end
16
15
 
16
+ def self.before_find_taxonomy_actions
17
+ # used by RH Cloud to delay the execution of local_find_taxonomy
18
+ skip_before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
19
+ yield
20
+ before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
21
+ end
22
+
17
23
  def_param_group :resource do
18
24
  param :organization, Hash, :required => true, :action_aware => true do
19
25
  param :name, String, :required => true
@@ -1,7 +1,7 @@
1
1
  module Katello
2
2
  class Api::V2::RepositoriesController < Api::V2::ApiController # rubocop:disable Metrics/ClassLength
3
3
  include Katello::Concerns::FilteredAutoCompleteSearch
4
-
4
+ INDEX_ACTIONS = [:index, :auto_complete_search].freeze
5
5
  generic_repo_wrap_params = []
6
6
  RepositoryTypeManager.generic_remote_options(defined_only: true).each do |option|
7
7
  generic_repo_wrap_params << option.name
@@ -16,8 +16,8 @@ module Katello
16
16
  CONTENT_CREDENTIAL_SSL_CLIENT_CERT_TYPE = "ssl_client_cert".freeze
17
17
  CONTENT_CREDENTIAL_SSL_CLIENT_KEY_TYPE = "ssl_client_key".freeze
18
18
 
19
- before_action :find_optional_organization, :only => [:index, :auto_complete_search]
20
- before_action :find_product, :only => [:index, :auto_complete_search]
19
+ before_action :find_optional_organization, :only => INDEX_ACTIONS
20
+ before_action :find_product, :only => INDEX_ACTIONS
21
21
  before_action :find_product_for_create, :only => [:create]
22
22
  before_action :find_organization_from_product, :only => [:create]
23
23
  before_action :find_unauthorized_katello_resource, :only => [:gpg_key_content]
@@ -35,6 +35,15 @@ module Katello
35
35
  skip_before_action :authorize, :only => [:gpg_key_content]
36
36
  skip_before_action :check_media_type, :only => [:upload_content]
37
37
 
38
+ def self.before_index_actions
39
+ # used by RH Cloud to delay the execution of find_optional_organization and find_product
40
+ skip_before_action :find_optional_organization, :only => INDEX_ACTIONS
41
+ skip_before_action :find_product, :only => INDEX_ACTIONS
42
+ yield
43
+ before_action :find_optional_organization, :only => INDEX_ACTIONS
44
+ before_action :find_product, :only => INDEX_ACTIONS
45
+ end
46
+
38
47
  def custom_index_relation(collection)
39
48
  collection.includes(:product)
40
49
  end
@@ -18,7 +18,8 @@ module Katello
18
18
 
19
19
  included do
20
20
  prepend Overrides
21
- before_action :set_content_view_environments, only: [:create, :update]
21
+ around_action :handle_content_view_environments_for_create, only: [:create]
22
+ before_action :handle_content_view_environments_for_update, only: [:update]
22
23
 
23
24
  def destroy
24
25
  Katello::RegistrationManager.unregister_host(@host, :unregistering => false)
@@ -34,21 +35,48 @@ module Katello
34
35
  render(:locals => { :resource => @host }, :template => 'katello/api/v2/hosts/show', :status => :ok)
35
36
  end
36
37
 
37
- def set_content_view_environments
38
+ def handle_content_view_environments_for_create
39
+ # validations should occur before the action so that the request can fail and not render multiple responses
40
+ cves = validate_content_view_environment_params
41
+ yield
42
+ # the actual assigning needs to wait until the host is created
43
+ set_content_view_environments(cves)
44
+ end
45
+
46
+ def handle_content_view_environments_for_update
47
+ cves = validate_content_view_environment_params
48
+ set_content_view_environments(cves)
49
+ end
50
+
51
+ def validate_content_view_environment_params
38
52
  content_facet_attributes = params.dig(:host, :content_facet_attributes)
39
- return if content_facet_attributes.blank? || @host&.content_facet.blank? ||
40
- (cve_params[:content_view_id].present? && cve_params[:lifecycle_environment_id].present?)
53
+ return if content_facet_attributes.blank? ||
54
+ (cve_params[:content_view_id].present? && cve_params[:lifecycle_environment_id].present?)
55
+
41
56
  cves = ::Katello::ContentViewEnvironment.fetch_content_view_environments(
42
57
  labels: cve_params[:content_view_environments],
43
58
  ids: cve_params[:content_view_environment_ids],
44
- organization: @organization || @host&.organization)
45
- if cves.present?
46
- @host.content_facet.content_view_environments = cves
47
- else
59
+ organization: find_organization || @host&.organization)
60
+ if cves.blank?
48
61
  handle_errors(labels: cve_params[:content_view_environments],
49
62
  ids: cve_params[:content_view_environment_ids])
50
63
  end
64
+ cves
65
+ end
66
+
67
+ # rubocop:disable Naming/AccessorMethodName
68
+ def set_content_view_environments(cves)
69
+ return if cves.blank?
70
+ if @host.blank?
71
+ Rails.logger.debug "No host; not assigning content view environments"
72
+ return
73
+ elsif @host&.content_facet.blank?
74
+ content_facet = Katello::Host::ContentFacet.new(host: @host)
75
+ @host.content_facet = content_facet
76
+ end
77
+ @host.content_facet.content_view_environments = cves
51
78
  end
79
+ # rubocop:enable Naming/AccessorMethodName
52
80
 
53
81
  def cve_params
54
82
  params.require(:host).require(:content_facet_attributes).permit(:content_view_id, :lifecycle_environment_id, content_view_environments: [], content_view_environment_ids: [])
@@ -20,7 +20,15 @@ module Actions
20
20
  end
21
21
 
22
22
  def run
23
- ::Katello::Repository.where(id: input[:repository_ids]).destroy_all
23
+ ::Katello::Repository.where(id: input[:repository_ids]).each do |repository|
24
+ SmartProxy.unscoped.with_repo(repository).each do |smart_proxy|
25
+ next if smart_proxy.pulp_primary?
26
+
27
+ smart_proxy.content_counts&.dig("content_view_versions", repository.content_view_version_id.to_s, "repositories")&.delete(repository.id.to_s)
28
+ smart_proxy.save
29
+ end
30
+ repository.destroy!
31
+ end
24
32
  end
25
33
  end
26
34
  end
@@ -96,8 +96,9 @@ module Actions
96
96
  end
97
97
 
98
98
  def handle_redhat_content(repository)
99
- if repository.content_view.content_view_environment(repository.environment)
100
- plan_action(Candlepin::Environment::SetContent, repository.content_view, repository.environment, repository.content_view.content_view_environment(repository.environment))
99
+ content_view_environment = repository.content_view.content_view_environment(repository.environment)
100
+ if content_view_environment && !repository.content_view.rolling?
101
+ plan_action(Candlepin::Environment::SetContent, repository.content_view, repository.environment, content_view_environment)
101
102
  end
102
103
  end
103
104
 
@@ -13,9 +13,8 @@ module Actions
13
13
  }.merge(opts)
14
14
  action_subject(organization)
15
15
  validate_repositories_immediate!(organization) if options[:fail_on_missing_content]
16
- content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_library_export_view(destination_server: options[:destination_server],
16
+ content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_or_create_library_export_view(destination_server: options[:destination_server],
17
17
  organization: organization,
18
- create_by_default: true,
19
18
  format: options[:format])
20
19
  repo_ids_in_library = organization.default_content_view_version.repositories.exportable(format: options[:format]).immediate_or_none.pluck(:id)
21
20
  content_view.update!(repository_ids: repo_ids_in_library)
@@ -8,9 +8,8 @@ module Actions
8
8
  action_subject(repository)
9
9
  validate_repositories_immediate!(repository)
10
10
  validate_export_types!(repository, opts[:format])
11
- content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_repository_export_view(
11
+ content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_or_create_repository_export_view(
12
12
  repository: repository,
13
- create_by_default: true,
14
13
  format: opts[:format])
15
14
  content_view.update!(repository_ids: [repository.library_instance_or_self.id])
16
15
 
@@ -178,5 +178,7 @@ module Katello
178
178
  _('Orphan cleanup failed to delete some Pulp repository versions. Check the logs for more details.')
179
179
  end
180
180
  end
181
+
182
+ class InvalidExportFormat < StandardError; end
181
183
  end
182
184
  end
@@ -32,6 +32,9 @@ module Katello
32
32
  scope :non_generated, -> { where(content_view: ::Katello::ContentView.ignore_generated) }
33
33
 
34
34
  scoped_search :on => :id, :complete_value => true
35
+ scoped_search :on => :label, :complete_value => true
36
+ scoped_search :relation => :content_view, :on => :label, :rename => :content_view
37
+ scoped_search :relation => :lifecycle_environment, :on => :label, :rename => :lifecycle_environment
35
38
 
36
39
  alias :lifecycle_environment :environment
37
40
  has_one :organization, :through => :environment
@@ -14,7 +14,9 @@ module Katello
14
14
 
15
15
  RHEL_EOS_SCHEDULE = { # dates that each support category ends
16
16
  'RHEL10' => {
17
- 'full_support' => nil,
17
+ 'full_support' => end_of_day('2030-05-31'),
18
+ 'maintenance_support' => end_of_day('2035-05-31'),
19
+ 'extended_support' => end_of_day('2038-05-31'),
18
20
  },
19
21
  'RHEL9' => {
20
22
  'full_support' => end_of_day('2027-05-31'),
@@ -5,6 +5,9 @@ module Katello
5
5
  include ImportExportCommon
6
6
  SYNCABLE = "syncable".freeze
7
7
  IMPORTABLE = "importable".freeze
8
+ UNDEFINED = "undefined".freeze
9
+
10
+ # Available formats for export (UNDEFINED excluded)
8
11
  FORMATS = [SYNCABLE, IMPORTABLE].freeze
9
12
 
10
13
  attr_reader :smart_proxy, :content_view_version, :destination_server, :from_content_view_version, :repository, :base_path
@@ -142,37 +145,41 @@ module Katello
142
145
  is_a?(SyncableFormatExport) ? SYNCABLE : IMPORTABLE
143
146
  end
144
147
 
145
- def self.find_library_export_view(destination_server:, organization:, create_by_default: false,
146
- format: IMPORTABLE)
147
- if format == IMPORTABLE
148
- generated_for = :library_export
149
- name = ::Katello::ContentView::EXPORT_LIBRARY
150
- else
151
- generated_for = :library_export_syncable
152
- name = "#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE"
153
- end
154
-
155
- find_generated_export_view(create_by_default: create_by_default,
148
+ def self.find_or_create_library_export_view(destination_server:, organization:,
149
+ format: UNDEFINED)
150
+ case format
151
+ when UNDEFINED
152
+ fail ::Katello::Errors::InvalidExportFormat, _("Export format must be specified for library exports.")
153
+ when IMPORTABLE
154
+ return find_generated_export_view(create_by_default: true,
156
155
  destination_server: destination_server,
157
156
  organization: organization,
158
- name: name,
159
- generated_for: generated_for)
157
+ name: ::Katello::ContentView::EXPORT_LIBRARY,
158
+ generated_for: :library_export)
159
+ when SYNCABLE
160
+ return find_generated_export_view(create_by_default: true,
161
+ destination_server: destination_server,
162
+ organization: organization,
163
+ name: "#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE",
164
+ generated_for: :library_export_syncable)
165
+ else
166
+ fail ::Katello::Errors::InvalidExportFormat, _("Unknown library export format '%s'.") % format
167
+ end
160
168
  end
161
169
 
162
- def self.find_repository_export_view(repository:, create_by_default: false,
163
- format: IMPORTABLE)
164
- if format == IMPORTABLE
165
- generated_for = :repository_export
166
- name = "Export-#{repository.label}-#{repository.library_instance_or_self.id}"
170
+ def self.find_or_create_repository_export_view(repository:, format: UNDEFINED)
171
+ case format
172
+ when UNDEFINED
173
+ fail ::Katello::Errors::InvalidExportFormat, _("Export format must be specified for non-incremental repository exports.")
174
+ when IMPORTABLE
175
+ return find_generated_export_view(create_by_default: true, destination_server: nil, organization: repository.organization,
176
+ name: "Export-#{repository.label}-#{repository.library_instance_or_self.id}", generated_for: :repository_export)
177
+ when SYNCABLE
178
+ return find_generated_export_view(create_by_default: true, destination_server: nil, organization: repository.organization,
179
+ name: "Export-SYNCABLE-#{repository.label}-#{repository.library_instance_or_self.id}", generated_for: :repository_export_syncable)
167
180
  else
168
- generated_for = :repository_export_syncable
169
- name = "Export-SYNCABLE-#{repository.label}-#{repository.library_instance_or_self.id}"
181
+ fail ::Katello::Errors::InvalidExportFormat, _("Unknown repository export format '%s'.") % format
170
182
  end
171
- find_generated_export_view(create_by_default: create_by_default,
172
- destination_server: nil,
173
- organization: repository.organization,
174
- name: name,
175
- generated_for: generated_for)
176
183
  end
177
184
 
178
185
  def self.generate_product_repo_strings(repositories:)
@@ -74,7 +74,7 @@ module Katello
74
74
  # You are trying to export between an incrementally updated content view version and regular version
75
75
  if from_content_view_version.incrementally_updated? != content_view_version.incrementally_updated?
76
76
  fail ExportValidationError,
77
- _("Cannot incrementally export from a incrementally exported version and a regular version or vice-versa. "\
77
+ _("Cannot incrementally export from a incrementally updated version and a regular version or vice-versa. "\
78
78
  " The exported Content View Version '%{content_view} %{current}' "\
79
79
  "cannot be incrementally exported from version '%{from}.'"\
80
80
  " Please do a full export." % { content_view: content_view_version.content_view.name,
@@ -31,6 +31,9 @@ child :content_view_environments => :content_view_environments do
31
31
  node :label do |cve|
32
32
  cve.label
33
33
  end
34
+ node :id do |cve|
35
+ cve.id
36
+ end
34
37
  end
35
38
 
36
39
  attributes :content_view_environment_labels
@@ -25,7 +25,7 @@ angular.module('Bastion.errata').filter('errataType', ['translate', function (tr
25
25
  errataType = translate('Security Advisory');
26
26
  break;
27
27
  default:
28
- errataType = type;
28
+ errataType = translate('Other Advisory');
29
29
  }
30
30
 
31
31
  return errataType;
@@ -2956,6 +2956,10 @@ msgstr ""
2956
2956
  msgid "OSTree Repositories <div>{{ library.counts.ostree_repositories || 0 }}</div>"
2957
2957
  msgstr ""
2958
2958
 
2959
+ #: app/assets/javascripts/bastion_katello/errata/errata-type.filter.js
2960
+ msgid "Other Advisory"
2961
+ msgstr ""
2962
+
2959
2963
  #: app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js
2960
2964
  msgid "Overridden"
2961
2965
  msgstr ""
@@ -4733,6 +4737,10 @@ msgstr ""
4733
4737
  msgid "Username of the upstream repository user for authentication. Leave empty if repository does not require authentication."
4734
4738
  msgstr ""
4735
4739
 
4740
+ #: app/assets/javascripts/bastion_katello/products/discovery/views/discovery.html
4741
+ msgid "Using a search parameter will improve repository discovery. A blank search might return an incomplete list due to registry's API limits."
4742
+ msgstr ""
4743
+
4736
4744
  #: app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html
4737
4745
  msgid "Variant"
4738
4746
  msgstr ""
@@ -293,6 +293,12 @@ msgid ""
293
293
  " This Host is not currently registered with subscription-manager. Use the <a href=\"/hosts/register\">Register Host</a> workflow to complete registration."
294
294
  msgstr ""
295
295
 
296
+ #: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
297
+ msgid ""
298
+ "<span> {{table.numSelected &gt 1? 'Register Content Hosts':'Register Content"
299
+ " Host' | translate}} </span>"
300
+ msgstr ""
301
+
296
302
  #: app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html
297
303
  msgid "1 Content Host"
298
304
  msgid_plural ""
@@ -670,7 +676,6 @@ msgstr ""
670
676
 
671
677
  #: app/assets/javascripts/bastion_katello/errata/views/apply-errata-confirm.html
672
678
  #: app/assets/javascripts/bastion_katello/errata/views/apply-errata.html
673
- #: app/assets/javascripts/bastion_katello/errata/views/errata.html
674
679
  msgid "Apply Errata"
675
680
  msgstr ""
676
681
 
@@ -3494,10 +3499,6 @@ msgstr ""
3494
3499
  msgid "Register a Content Host"
3495
3500
  msgstr ""
3496
3501
 
3497
- #: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
3498
- msgid "Register Content Host"
3499
- msgstr ""
3500
-
3501
3502
  #: app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html
3502
3503
  #: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
3503
3504
  msgid "Registered"