katello 4.16.3 → 4.17.0.rc1

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 (509) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +5 -3
  3. data/app/assets/javascripts/katello/locale/bn/katello.js +77 -263
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +77 -263
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +77 -263
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +77 -263
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +77 -263
  8. data/app/assets/javascripts/katello/locale/de/katello.js +87 -273
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +77 -263
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +77 -263
  11. data/app/assets/javascripts/katello/locale/el/katello.js +77 -263
  12. data/app/assets/javascripts/katello/locale/en/katello.js +77 -263
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +77 -263
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +77 -263
  15. data/app/assets/javascripts/katello/locale/es/katello.js +242 -428
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +77 -263
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +900 -1086
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +77 -263
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +77 -263
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +77 -263
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +77 -263
  22. data/app/assets/javascripts/katello/locale/id/katello.js +77 -263
  23. data/app/assets/javascripts/katello/locale/it/katello.js +78 -264
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +628 -814
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +474 -660
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +77 -263
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +2129 -2314
  28. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +77 -263
  29. data/app/assets/javascripts/katello/locale/mr/katello.js +77 -263
  30. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +77 -263
  31. data/app/assets/javascripts/katello/locale/or/katello.js +77 -263
  32. data/app/assets/javascripts/katello/locale/pa/katello.js +77 -263
  33. data/app/assets/javascripts/katello/locale/pl/katello.js +77 -263
  34. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +77 -263
  35. data/app/assets/javascripts/katello/locale/pt/katello.js +77 -263
  36. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +255 -441
  37. data/app/assets/javascripts/katello/locale/ro/katello.js +77 -263
  38. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +77 -263
  39. data/app/assets/javascripts/katello/locale/ru/katello.js +78 -264
  40. data/app/assets/javascripts/katello/locale/sl/katello.js +77 -263
  41. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +77 -263
  42. data/app/assets/javascripts/katello/locale/ta/katello.js +77 -263
  43. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +77 -263
  44. data/app/assets/javascripts/katello/locale/te/katello.js +77 -263
  45. data/app/assets/javascripts/katello/locale/tr/katello.js +77 -263
  46. data/app/assets/javascripts/katello/locale/vi/katello.js +77 -263
  47. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +77 -263
  48. data/app/assets/javascripts/katello/locale/zh/katello.js +77 -263
  49. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +632 -818
  50. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +78 -264
  51. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +19 -5
  52. data/app/controllers/katello/api/v2/content_view_components_controller.rb +6 -6
  53. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +3 -0
  54. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +6 -0
  55. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -1
  56. data/app/controllers/katello/api/v2/exports_controller.rb +3 -0
  57. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +12 -14
  58. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -10
  59. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +8 -2
  60. data/app/lib/actions/helpers/rolling_cv_repos.rb +25 -0
  61. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +6 -1
  62. data/app/lib/actions/katello/content_view/add_rolling_repo_clone.rb +39 -0
  63. data/app/lib/actions/katello/content_view/create.rb +3 -0
  64. data/app/lib/actions/katello/content_view/refresh_rolling_repo.rb +40 -0
  65. data/app/lib/actions/katello/content_view/remove.rb +8 -4
  66. data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +28 -0
  67. data/app/lib/actions/katello/content_view/update.rb +8 -0
  68. data/app/lib/actions/katello/repository/check_matching_content.rb +1 -8
  69. data/app/lib/actions/katello/repository/import_upload.rb +5 -0
  70. data/app/lib/actions/katello/repository/sync.rb +8 -4
  71. data/app/lib/actions/katello/repository/upload_files.rb +7 -1
  72. data/app/lib/actions/pulp3/orchestration/orphan_cleanup/remove_orphans.rb +3 -2
  73. data/app/lib/actions/pulp3/orphan_cleanup/delete_orphan_repository_versions.rb +8 -1
  74. data/app/lib/katello/errors.rb +8 -0
  75. data/app/lib/katello/validators/container_image_name_validator.rb +3 -2
  76. data/app/models/katello/authorization/repository.rb +11 -1
  77. data/app/models/katello/concerns/host_managed_extensions.rb +2 -2
  78. data/app/models/katello/concerns/pulp_database_unit.rb +12 -42
  79. data/app/models/katello/concerns/smart_proxy_extensions.rb +8 -0
  80. data/app/models/katello/content_view.rb +14 -1
  81. data/app/models/katello/content_view_component.rb +4 -0
  82. data/app/models/katello/content_view_environment.rb +1 -0
  83. data/app/models/katello/content_view_version.rb +3 -2
  84. data/app/models/katello/host/content_facet.rb +18 -5
  85. data/app/models/katello/product_content.rb +3 -1
  86. data/app/models/katello/repository.rb +3 -3
  87. data/app/services/katello/content_unit_indexer.rb +1 -1
  88. data/app/services/katello/pulp3/api/content_guard.rb +1 -1
  89. data/app/services/katello/pulp3/api/core.rb +6 -0
  90. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +58 -1
  91. data/app/services/katello/pulp3/smart_proxy_repository.rb +67 -3
  92. data/app/services/katello/smart_proxy_helper.rb +6 -1
  93. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +15 -1
  94. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +15 -1
  95. data/app/views/foreman/job_templates/install_group_-_katello_ansible_default.erb +15 -2
  96. data/app/views/foreman/job_templates/install_packages_by_search_query_-_katello_ansible_default.erb +21 -2
  97. data/app/views/foreman/job_templates/remove_group_-_katello_ansible_default.erb +15 -1
  98. data/app/views/foreman/job_templates/remove_packages_by_search_query_-_katello_ansible_default.erb +20 -1
  99. data/app/views/foreman/job_templates/update_group_-_katello_ansible_default.erb +15 -2
  100. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +17 -1
  101. data/app/views/katello/api/v2/activation_keys/base.json.rabl +1 -0
  102. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +2 -1
  103. data/app/views/katello/api/v2/content_facet/base.json.rabl +2 -0
  104. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +12 -0
  105. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  106. data/app/views/katello/api/v2/environments/show.json.rabl +14 -0
  107. data/app/views/katello/api/v2/hosts/base.json.rabl +1 -0
  108. data/app/views/katello/api/v2/organizations/show.json.rabl +2 -0
  109. data/app/views/katello/api/v2/repositories/base.json.rabl +2 -1
  110. data/db/migrate/20190930192813_add_pulp3_hrefs_to_content_types.rb +1 -1
  111. data/db/migrate/20240924161240_katello_recreate_evr_constructs.rb +0 -20
  112. data/db/migrate/20241022122325_add_rolling_to_katello_content_views.rb +5 -0
  113. data/db/migrate/20241025151105_remove_pulp3_migrated_hrefs_from_content_tables.rb +1 -1
  114. data/db/migrate/20250215143303_drop_katello_yum_metadata_file.rb +5 -0
  115. data/db/migrate/20250409120843_fix_file_download_policy.rb +11 -0
  116. data/db/migrate/20250410155300_change_ansible_templates_category.rb +22 -0
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +0 -6
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +0 -6
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +0 -6
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +0 -6
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +0 -6
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +0 -6
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +0 -6
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +0 -6
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +0 -6
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +0 -6
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +0 -6
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +0 -6
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +0 -6
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +0 -6
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +0 -6
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +0 -6
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +0 -6
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +0 -6
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +0 -6
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +0 -6
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +0 -6
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +0 -6
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +0 -6
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +0 -6
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +0 -6
  142. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +0 -6
  143. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +0 -6
  144. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +0 -6
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +0 -6
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +0 -6
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +0 -6
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +0 -6
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +0 -6
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +0 -6
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +0 -6
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +0 -6
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +0 -6
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +0 -6
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +0 -6
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +0 -6
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +0 -6
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +0 -6
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +0 -6
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +0 -6
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +0 -6
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +0 -6
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +3 -0
  164. data/lib/katello/engine.rb +9 -1
  165. data/lib/katello/repository_types/python.rb +1 -1
  166. data/lib/katello/tasks/repository.rake +1 -1
  167. data/lib/katello/version.rb +1 -1
  168. data/locale/action_names.rb +3 -0
  169. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  170. data/locale/bn/katello.po +77 -263
  171. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  172. data/locale/bn_IN/katello.po +77 -263
  173. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  174. data/locale/ca/katello.po +77 -263
  175. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  176. data/locale/cs/katello.po +77 -263
  177. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  178. data/locale/cs_CZ/katello.po +77 -263
  179. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  180. data/locale/de/katello.po +91 -277
  181. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  182. data/locale/de_AT/katello.po +77 -263
  183. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  184. data/locale/de_DE/katello.po +77 -263
  185. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/el/katello.po +77 -263
  187. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  188. data/locale/en/katello.po +77 -263
  189. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  190. data/locale/en_GB/katello.po +77 -263
  191. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  192. data/locale/en_US/katello.po +77 -263
  193. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  194. data/locale/es/katello.po +245 -432
  195. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  196. data/locale/et_EE/katello.po +77 -263
  197. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  198. data/locale/fr/katello.po +906 -1092
  199. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/gl/katello.po +77 -263
  201. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  202. data/locale/gu/katello.po +77 -263
  203. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  204. data/locale/he_IL/katello.po +77 -263
  205. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/hi/katello.po +77 -263
  207. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  208. data/locale/id/katello.po +77 -263
  209. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  210. data/locale/it/katello.po +78 -264
  211. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/ja/katello.po +634 -822
  213. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  214. data/locale/ka/katello.po +474 -662
  215. data/locale/katello.pot +1194 -1472
  216. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  217. data/locale/kn/katello.po +77 -263
  218. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  219. data/locale/ko/katello.po +2125 -2324
  220. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  221. data/locale/ml_IN/katello.po +77 -263
  222. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  223. data/locale/mr/katello.po +77 -263
  224. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  225. data/locale/nl_NL/katello.po +77 -263
  226. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  227. data/locale/or/katello.po +77 -263
  228. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  229. data/locale/pa/katello.po +77 -263
  230. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  231. data/locale/pl/katello.po +77 -263
  232. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  233. data/locale/pl_PL/katello.po +77 -263
  234. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  235. data/locale/pt/katello.po +77 -263
  236. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  237. data/locale/pt_BR/katello.po +258 -445
  238. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  239. data/locale/ro/katello.po +77 -263
  240. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  241. data/locale/ro_RO/katello.po +77 -263
  242. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  243. data/locale/ru/katello.po +78 -264
  244. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  245. data/locale/sl/katello.po +77 -263
  246. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  247. data/locale/sv_SE/katello.po +77 -263
  248. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  249. data/locale/ta/katello.po +77 -263
  250. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  251. data/locale/ta_IN/katello.po +77 -263
  252. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  253. data/locale/te/katello.po +77 -263
  254. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  255. data/locale/tr/katello.po +77 -263
  256. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  257. data/locale/vi/katello.po +77 -263
  258. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  259. data/locale/vi_VN/katello.po +77 -263
  260. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  261. data/locale/zh/katello.po +77 -263
  262. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  263. data/locale/zh_CN/katello.po +632 -824
  264. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  265. data/locale/zh_TW/katello.po +78 -264
  266. data/webpack/ForemanColumnExtensions/index.js +12 -4
  267. data/webpack/components/ActivationKeysSearch/index.js +6 -7
  268. data/webpack/components/Bookmark/AddBookmarkModal.js +3 -3
  269. data/webpack/components/Bookmark/Bookmark.scss +3 -3
  270. data/webpack/components/Bookmark/index.js +7 -2
  271. data/webpack/components/EditableSwitch.js +1 -1
  272. data/webpack/components/EditableTextInput/EditableTextInput.js +1 -1
  273. data/webpack/components/EditableTextInput/editableTextInput.scss +1 -1
  274. data/webpack/components/Errata/index.js +1 -24
  275. data/webpack/components/Loading.js +10 -6
  276. data/webpack/components/Packages/index.js +2 -1
  277. data/webpack/components/SelectAllCheckbox/index.js +7 -3
  278. data/webpack/components/SelectableDropdown/SelectableDropdown.js +21 -3
  279. data/webpack/components/Table/EmptyStateMessage.js +12 -14
  280. data/webpack/components/Table/MainTable.js +8 -7
  281. data/webpack/components/Table/MainTable.scss +4 -4
  282. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +4 -1
  283. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +1 -1
  284. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +9 -6
  285. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/changeHostCVModal.test.js +2 -1
  286. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViews.fixtures.json +4 -1
  287. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +23 -6
  288. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +1 -1
  289. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +5 -3
  290. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.scss +3 -3
  291. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +1 -1
  292. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +25 -10
  293. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +5 -2
  294. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +2 -2
  295. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +5 -4
  296. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +6 -3
  297. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +19 -12
  298. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +1 -1
  299. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +1 -4
  300. data/webpack/components/extensions/HostDetails/DetailsTabCards/ImageModeCard.js +1 -4
  301. data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +1 -4
  302. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/HwPropertiesCard.test.js +63 -0
  303. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/ImageModeCard.test.js +73 -0
  304. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/InstalledProductsCard.test.js +45 -0
  305. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +12 -2
  306. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.scss +1 -1
  307. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +10 -13
  308. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.scss +1 -1
  309. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +46 -21
  310. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.scss +1 -1
  311. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +15 -7
  312. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +13 -3
  313. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.scss +1 -1
  314. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +34 -20
  315. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.scss +1 -1
  316. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +8 -6
  317. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +5 -3
  318. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.scss +1 -1
  319. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +12 -13
  320. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +16 -6
  321. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsInstallModal.test.js +10 -5
  322. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsTab.test.js +48 -22
  323. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +123 -47
  324. data/webpack/components/extensions/HostDetails/Tabs/__tests__/moduleStreamsTab.test.js +14 -7
  325. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +10 -5
  326. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +41 -24
  327. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +50 -25
  328. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +50 -25
  329. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +3 -0
  330. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_Review.js +16 -2
  331. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +6 -2
  332. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +5 -1
  333. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_Review.js +16 -2
  334. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +6 -2
  335. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +15 -2
  336. data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +1 -1
  337. data/webpack/components/extensions/Hosts/BulkActions/__tests__/bulkChangeHostCVModal.test.js +2 -1
  338. data/webpack/components/extensions/Hosts/FontAwesomeImageModeIcon.js +1 -1
  339. data/webpack/components/extensions/Hosts/ImageModeHostAlert.js +14 -0
  340. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +14 -17
  341. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/Force.test.js.snap +1 -1
  342. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/IgnoreSubmanErrors.test.js.snap +1 -1
  343. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +38 -49
  344. data/webpack/containers/Application/overrides.scss +7 -7
  345. data/webpack/ouia_id_check.js +15 -11
  346. data/webpack/redux/actions/RedHatRepositories/helpers.js +0 -2
  347. data/webpack/scenes/ActivationKeys/Details/__tests__/activationKeyDetails.test.js +12 -6
  348. data/webpack/scenes/ActivationKeys/Details/components/DeleteMenu.js +12 -2
  349. data/webpack/scenes/ActivationKeys/Details/components/EditModal.js +3 -3
  350. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +3 -1
  351. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +3 -1
  352. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +12 -6
  353. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +1 -1
  354. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +22 -7
  355. data/webpack/scenes/AlternateContentSources/Create/Steps/NameACS.js +2 -2
  356. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +1 -1
  357. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +6 -3
  358. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +25 -15
  359. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +9 -6
  360. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +2 -2
  361. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +1 -1
  362. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +33 -7
  363. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +10 -5
  364. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +4 -2
  365. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +10 -8
  366. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +4 -2
  367. data/webpack/scenes/BootedContainerImages/BootedContainerImagesPage.js +5 -5
  368. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +8 -4
  369. data/webpack/scenes/Content/__tests__/contentTable.test.js +4 -2
  370. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  371. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +1 -0
  372. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +2 -1
  373. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +86 -31
  374. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.scss +10 -2
  375. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +1 -0
  376. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +10 -4
  377. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +3 -1
  378. data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +6 -6
  379. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +7 -2
  380. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +7 -2
  381. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReview.js +3 -3
  382. data/webpack/scenes/ContentViews/Delete/Steps/CVEnvironmentSelectionForm.scss +1 -1
  383. data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +2 -1
  384. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +3 -2
  385. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +10 -8
  386. data/webpack/scenes/ContentViews/Delete/__tests__/cvDetails.fixtures.json +2 -1
  387. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +16 -5
  388. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +19 -5
  389. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +1 -1
  390. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +11 -2
  391. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/compositeCVDetails.fixtures.json +2 -1
  392. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +69 -27
  393. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/publishedContentViewDetails.fixtures.json +2 -1
  394. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +22 -29
  395. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +6 -2
  396. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +20 -7
  397. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +4 -2
  398. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +5 -2
  399. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +3 -1
  400. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +1 -1
  401. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +4 -2
  402. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +13 -1
  403. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +23 -7
  404. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +23 -5
  405. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +15 -3
  406. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +15 -3
  407. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +13 -1
  408. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +6 -4
  409. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +11 -1
  410. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +4 -2
  411. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/matchContentModal.scss +1 -1
  412. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +2 -2
  413. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +4 -4
  414. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +18 -12
  415. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +7 -11
  416. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +81 -70
  417. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewErrataByDateDetails.fixtures.json +1 -0
  418. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +4 -2
  419. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +52 -38
  420. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +9 -4
  421. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +18 -12
  422. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErratumFilterDetails.fixtures.json +1 -0
  423. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailModuleAffectedRepos.fixtures.json +1 -0
  424. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailWithAffectedRepos.fixtures.json +1 -0
  425. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterFixutre.fixture.json +2 -1
  426. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +77 -67
  427. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilterDetails.fixtures.json +1 -0
  428. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvPackageFilterDetail.fixtures.json +1 -0
  429. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +2 -2
  430. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +4 -2
  431. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +1 -1
  432. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +7 -5
  433. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +6 -3
  434. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewRepoAdd.fixture.json +1 -0
  435. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +3 -2
  436. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteModal.js +3 -1
  437. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ConfirmBulkDelete.js +2 -2
  438. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +3 -1
  439. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +3 -1
  440. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +4 -4
  441. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +11 -11
  442. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +15 -5
  443. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionEnvironments.js +1 -1
  444. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +13 -3
  445. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +3 -1
  446. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +17 -13
  447. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +12 -7
  448. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +64 -7
  449. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +52 -21
  450. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +30 -16
  451. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +7 -7
  452. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +5 -3
  453. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +4 -2
  454. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +6 -3
  455. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +2 -1
  456. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +6 -6
  457. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +35 -4
  458. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
  459. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetail.test.js +197 -0
  460. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetails.fixtures.json +82 -0
  461. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +3 -7
  462. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +2 -2
  463. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +6 -5
  464. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +3 -1
  465. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +15 -7
  466. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +4 -4
  467. data/webpack/scenes/ContentViews/Table/ContentViewVersionCell.js +6 -4
  468. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +14 -3
  469. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +3 -0
  470. data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +1 -0
  471. data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +89 -2
  472. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +85 -14
  473. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +2 -1
  474. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +20 -6
  475. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelect.js +4 -1
  476. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelectOption.js +11 -2
  477. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +27 -7
  478. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +2 -2
  479. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +6 -2
  480. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +4 -1
  481. data/webpack/scenes/ContentViews/components/FiltersAppliedIcon.js +4 -2
  482. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.js +7 -6
  483. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.scss +2 -2
  484. data/webpack/scenes/ContentViews/components/contentViewIcon.scss +16 -3
  485. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +6 -1
  486. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +3 -3
  487. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +2 -1
  488. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +5 -3
  489. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +3 -2
  490. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +1 -1
  491. data/webpack/scenes/Hosts/ChangeContentSource/components/HostsModal.js +1 -1
  492. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +1 -1
  493. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/__snapshots__/EnabledRepositoryContent.test.js.snap +1 -1
  494. data/webpack/scenes/RedHatRepositories/index.scss +1 -1
  495. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +27 -7
  496. data/webpack/scenes/SmartProxy/ExpandedSmartProxyRepositories.js +51 -2
  497. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +2 -2
  498. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +14 -9
  499. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationForm.scss +1 -1
  500. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CustomCdnTypeForm.js +2 -2
  501. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/NetworkSyncForm.js +6 -6
  502. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +2 -1
  503. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CustomCdnTypeForm.test.js +2 -1
  504. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/ExportSyncForm.test.js +2 -1
  505. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/NetworkSyncForm.test.js +2 -1
  506. metadata +72 -53
  507. data/app/models/katello/yum_metadata_file.rb +0 -22
  508. data/app/services/katello/pulp3/yum_metadata_file.rb +0 -20
  509. data/db/migrate/20250714190050_add_missing_rpms_evr_index.rb +0 -14
@@ -1,6 +1,7 @@
1
1
  module Katello
2
2
  # rubocop:disable Metrics/ClassLength
3
3
  class Api::Registry::RegistryProxiesController < Api::V2::ApiController
4
+ include Katello::Authentication::ClientAuthentication
4
5
  before_action :disable_strong_params
5
6
  before_action :confirm_settings
6
7
  skip_before_action :authorize
@@ -43,6 +44,18 @@ module Katello
43
44
  end
44
45
  end
45
46
 
47
+ def authenticate_cert_request
48
+ if cert_present?
49
+ client_cert = ::Cert::RhsmClient.new(cert_from_request)
50
+ uuid = client_cert.uuid
51
+ auth = authenticate_client
52
+ if auth
53
+ ::User.current = ::User.anonymous_admin
54
+ @host = Katello::Host::ContentFacet.find_by(uuid: uuid)&.host
55
+ end
56
+ end
57
+ end
58
+
46
59
  def redirect_authorization_headers
47
60
  response.headers['Docker-Distribution-API-Version'] = 'registry/2.0'
48
61
  response.headers['Www-Authenticate'] = "Bearer realm=\"#{request_url}/v2/token\"," \
@@ -64,6 +77,9 @@ module Katello
64
77
  redirect_authorization_headers if redirect_on_failure
65
78
  return false
66
79
  end
80
+ else
81
+ authenticate_cert_request
82
+ return true if @host
67
83
  end
68
84
  false
69
85
  end
@@ -454,7 +470,7 @@ module Katello
454
470
  return nil unless params[:repository]
455
471
  repository = Repository.docker_type.find_by(container_repository_name: params[:repository])
456
472
  if require_user_authorization?(repository)
457
- repository = Repository.readable_docker_catalog.find_by(container_repository_name: params[:repository])
473
+ repository = Repository.readable_docker_catalog(@host).find_by(container_repository_name: params[:repository])
458
474
  end
459
475
  repository
460
476
  end
@@ -544,8 +560,6 @@ module Katello
544
560
 
545
561
  def check_blob
546
562
  pulp_response = Resources::Registry::Proxy.get(@_request.fullpath, 'Accept' => request.headers['Accept'])
547
- response.headers['Content-Type'] = pulp_response.headers[:content_type] if pulp_response.headers[:content_type]
548
- response.headers['Content-Length'] = pulp_response.headers[:content_length] if pulp_response.headers[:content_length]
549
563
  head pulp_response.code
550
564
  end
551
565
 
@@ -662,7 +676,7 @@ module Katello
662
676
  params[:per_page] = params[:n] || 25
663
677
  params[:search] = params[:q]
664
678
 
665
- search_results = scoped_search(Repository.readable_docker_catalog.distinct,
679
+ search_results = scoped_search(Repository.readable_docker_catalog(@host).distinct,
666
680
  :container_repository_name, :asc, options)
667
681
 
668
682
  results = {
@@ -676,7 +690,7 @@ module Katello
676
690
  end
677
691
 
678
692
  def catalog
679
- repositories = Repository.readable_docker_catalog.collect do |repository|
693
+ repositories = Repository.readable_docker_catalog(@host).collect do |repository|
680
694
  repository.container_repository_name
681
695
  end
682
696
  render json: { repositories: repositories }
@@ -47,7 +47,7 @@ module Katello
47
47
  CAST (#{kcc}.composite_content_view_id as BOOLEAN) ASC, #{kc}.name
48
48
  SQL
49
49
  query = Katello::ContentView.readable.in_organization(@organization)
50
- query = query&.non_composite&.non_default&.generated_for_none
50
+ query = query&.non_composite&.non_default&.non_rolling&.generated_for_none
51
51
  component_cv_ids = Katello::ContentViewComponent.where(composite_content_view_id: @view.id).select(:content_view_id)
52
52
  query = case params[:status]
53
53
  when "Not added"
@@ -145,23 +145,23 @@ module Katello
145
145
  def get_total(status)
146
146
  case status
147
147
  when 'All'
148
- return Katello::ContentView.non_default.non_composite.in_organization(@organization).count
148
+ return Katello::ContentView.non_default.non_composite.non_rolling.in_organization(@organization).count
149
149
  when 'Added'
150
150
  return Katello::ContentViewComponent.where(composite_content_view_id: @view.id).count
151
151
  when 'Not added'
152
- return Katello::ContentView.non_default.non_composite.in_organization(@organization).count - Katello::ContentViewComponent.where(composite_content_view_id: @view.id).count
152
+ return Katello::ContentView.non_default.non_composite.non_rolling.in_organization(@organization).count - Katello::ContentViewComponent.where(composite_content_view_id: @view.id).count
153
153
  else
154
- return Katello::ContentView.non_default.non_composite.in_organization(@organization).count
154
+ return Katello::ContentView.non_default.non_composite.non_rolling.in_organization(@organization).count
155
155
  end
156
156
  end
157
157
 
158
158
  def find_composite_content_view
159
- @view = ContentView.composite.non_default.readable.find_by(id: params[:composite_content_view_id])
159
+ @view = ContentView.composite.non_default.non_rolling.readable.find_by(id: params[:composite_content_view_id])
160
160
  throw_resource_not_found(name: 'composite content view', id: params[:composite_content_view_id]) if @view.nil?
161
161
  end
162
162
 
163
163
  def find_composite_content_view_for_edit
164
- @view = ContentView.composite.non_default.editable.find_by(id: params[:composite_content_view_id])
164
+ @view = ContentView.composite.non_default.non_rolling.editable.find_by(id: params[:composite_content_view_id])
165
165
  throw_resource_not_found(name: 'composite content view', id: params[:composite_content_view_id]) if @view.nil?
166
166
  end
167
167
 
@@ -43,6 +43,9 @@ module Katello
43
43
  param :repository_ids, Array, :desc => N_("list of repository ids")
44
44
  param :description, String, :desc => N_("description of the filter")
45
45
  def create
46
+ if @view.rolling?
47
+ fail HttpErrors::BadRequest, _("It's not possible to create a filter for a rolling content view.")
48
+ end
46
49
  params[:type] = "erratum" if (params[:type] == "erratum_date" || params[:type] == "erratum_id")
47
50
  filter = ContentViewFilter.create_for(params[:type], filter_params.merge(:content_view => @view))
48
51
  respond :resource => filter
@@ -60,6 +60,9 @@ module Katello
60
60
  param :environment_ids, Array, :desc => N_("Identifiers for Lifecycle Environment")
61
61
  param :description, String, :desc => N_("The description for the content view version promotion")
62
62
  def promote
63
+ if @view.rolling?
64
+ fail HttpErrors::BadRequest, _("It's not possible to promote a rolling content view.")
65
+ end
63
66
  is_force = ::Foreman::Cast.to_bool(params[:force])
64
67
  task = async_task(::Actions::Katello::ContentView::Promote,
65
68
  @content_view_version, @environments, is_force, params[:description])
@@ -97,6 +100,9 @@ Alternatively, use the 'force' parameter to regenerate metadata locally. New ver
97
100
  api :DELETE, "/content_view_versions/:id", N_("Remove content view version")
98
101
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
99
102
  def destroy
103
+ if @view.rolling?
104
+ fail HttpErrors::BadRequest, _("It's not possible to destroy a version of a rolling content view.")
105
+ end
100
106
  task = async_task(::Actions::Katello::ContentViewVersion::Destroy, @content_view_version)
101
107
  respond_for_async :resource => task
102
108
  end
@@ -84,12 +84,14 @@ module Katello
84
84
  param :name, String, :desc => N_("Name of the content view"), :required => true
85
85
  param :label, String, :desc => N_("Content view label")
86
86
  param :composite, :bool, :desc => N_("Composite content view")
87
+ param :rolling, :bool, :desc => N_("Rolling content view")
87
88
  param_group :content_view
88
89
  def create
89
90
  @content_view = ContentView.create!(view_params) do |view|
90
91
  view.organization = @organization
91
92
  view.label ||= labelize_params(params[:content_view])
92
93
  end
94
+ sync_task(::Actions::Katello::ContentView::Create, @content_view)
93
95
 
94
96
  respond :resource => @content_view
95
97
  end
@@ -192,6 +194,9 @@ module Katello
192
194
  param :key_content_view_id, :number, :desc => N_("content view to reassign orphaned activation keys to")
193
195
  param :key_environment_id, :number, :desc => N_("environment to reassign orphaned activation keys to")
194
196
  def bulk_delete_versions
197
+ if @content_view.rolling?
198
+ fail HttpErrors::BadRequest, _("It's not possible to bulk remove versions from a rolling content view.")
199
+ end
195
200
  params[:bulk_content_view_version_ids] ||= {}
196
201
 
197
202
  versions = find_bulk_items(bulk_params: params[:bulk_content_view_version_ids],
@@ -237,6 +242,9 @@ module Katello
237
242
  param :name, String, :required => true, :desc => N_("New content view name")
238
243
  def copy
239
244
  @content_view = Katello::ContentView.readable.find_by(:id => params[:id])
245
+ if @content_view.rolling?
246
+ fail HttpErrors::BadRequest, _("It's not possible to copy a rolling content view.")
247
+ end
240
248
  throw_resource_not_found(name: 'content_view', id: params[:id]) if @content_view.blank?
241
249
  ensure_non_default
242
250
  new_content_view = @content_view.copy(params[:content_view][:name])
@@ -246,6 +254,9 @@ module Katello
246
254
  private
247
255
 
248
256
  def validate_publish_params!
257
+ if @content_view.rolling?
258
+ fail HttpErrors::BadRequest, _("It's not possible to publish a rolling content view.")
259
+ end
249
260
  if params[:repos_units].present? && @content_view.composite?
250
261
  fail HttpErrors::BadRequest, _("Directly setting package lists on composite content views is not allowed. Please " \
251
262
  "update the components, then re-publish the composite.")
@@ -284,7 +295,7 @@ module Katello
284
295
  def view_params
285
296
  attrs = [:name, :description, :auto_publish, :solve_dependencies, :import_only,
286
297
  :default, :created_at, :updated_at, :next_version, {:component_ids => []}]
287
- attrs.push(:label, :composite) if action_name == "create"
298
+ attrs.push(:label, :composite, :rolling) if action_name == "create"
288
299
  if (!@content_view || !@content_view.composite?)
289
300
  attrs.push({:repository_ids => []}, :repository_ids)
290
301
  end
@@ -108,6 +108,9 @@ module Katello
108
108
  @version = ContentViewVersion.exportable.find_by_id(params[:id])
109
109
  throw_resource_not_found(name: 'content view version', id: params[:id]) if @version.blank?
110
110
  @view = @version.content_view
111
+ if @view.rolling?
112
+ fail HttpErrors::BadRequest, _("It's not possible to export a rolling content view.")
113
+ end
111
114
  end
112
115
 
113
116
  def find_history
@@ -240,20 +240,18 @@ module Katello
240
240
  def find_content_overrides
241
241
  if !params.dig(:content_overrides_search, :search).nil?
242
242
 
243
- content_labels = ::Katello::Content.joins(:product_contents)
244
- .where("#{Katello::ProductContent.table_name}.product_id": @host.organization.products.subscribable.enabled)
245
- .search_for(params[:content_overrides_search][:search])
246
- .pluck(:label)
247
-
248
- if Foreman::Cast.to_bool(params.dig(:content_overrides_search, :limit_to_env))
249
- env_content = ProductContentFinder.new(
250
- :match_subscription => false,
251
- :match_environment => true,
252
- :consumable => @host.subscription_facet
253
- ).product_content
254
- env_content_labels = ::Katello::Content.find(env_content.pluck(:content_id)).pluck(:label)
255
- content_labels &= env_content_labels
256
- end
243
+ content = ::Katello::Content.joins(:product_contents)
244
+ .where("#{Katello::ProductContent.table_name}.product_id": @host.organization.products.subscribable.enabled)
245
+
246
+ env_content = ProductContentFinder.new(
247
+ :match_subscription => false,
248
+ :match_environment => Foreman::Cast.to_bool(params.dig(:content_overrides_search, :limit_to_env)),
249
+ :consumable => @host.subscription_facet
250
+ ).product_content
251
+ content = content.where(id: env_content.pluck(:content_id))
252
+
253
+ content_labels = content.search_for(params[:content_overrides_search][:search])
254
+ .pluck(:label)
257
255
 
258
256
  @content_overrides = content_labels.map do |label|
259
257
  { content_label: label,
@@ -109,16 +109,16 @@ module Katello
109
109
  respond_for_async :resource => task
110
110
  end
111
111
 
112
- api :PUT, "/organizations/:label/cancel_repo_discover", N_("Cancel repository discovery")
113
- param :label, String, :desc => N_("Organization label")
112
+ api :PUT, "/organizations/:id/cancel_repo_discover", N_("Cancel repository discovery")
113
+ param :id, String, :desc => N_("Organization ID or title")
114
114
  param :url, String, :desc => N_("base url to perform repo discovery on")
115
115
  def cancel_repo_discover
116
116
  task = @organization.cancel_repo_discovery
117
117
  respond_for_async :resource => task
118
118
  end
119
119
 
120
- api :GET, "/organizations/:label/download_debug_certificate", N_("Download a debug certificate")
121
- param :label, String, :desc => N_("Organization label")
120
+ api :GET, "/organizations/:id/download_debug_certificate", N_("Download a debug certificate")
121
+ param :id, String, :desc => N_("Organization ID or title")
122
122
  def download_debug_certificate
123
123
  pem = @organization.debug_cert
124
124
  data = "#{pem[:key]}\n\n#{pem[:cert]}"
@@ -168,11 +168,15 @@ module Katello
168
168
 
169
169
  protected
170
170
 
171
+ def organization_export_content_permission?
172
+ org = Organization.friendly.find(params[:id])
173
+ org&.authorized?(:export_content)
174
+ end
175
+
171
176
  def action_permission
172
177
  if params[:action] == "releases"
173
178
  :view
174
- elsif params[:action] == "download_debug_certificate" &&
175
- Organization.find(params[:id]).authorized?(:export_content)
179
+ elsif params[:action] == "download_debug_certificate" && organization_export_content_permission?
176
180
  :view
177
181
  elsif %w(download_debug_certificate redhat_provider repo_discover cdn_configuration
178
182
  cancel_repo_discover).include?(params[:action])
@@ -182,10 +186,6 @@ module Katello
182
186
  end
183
187
  end
184
188
 
185
- def resource_identifying_attributes
186
- %w(id label)
187
- end
188
-
189
189
  def skip_nested_id
190
190
  ["default_content_view_id", "library_id"]
191
191
  end
@@ -119,7 +119,11 @@ module Katello
119
119
  return deny_access unless KTEnvironment.promotable.where(:id => env_ids).count == env_ids.size && view.promotable_or_removable?
120
120
 
121
121
  total_count = Katello::Host::ContentFacet.with_content_views(view).with_environments(env_ids).count
122
- if total_count > 0
122
+ single_env_host_count = Katello::Host::ContentFacet
123
+ .with_content_views(view)
124
+ .with_environments(env_ids)
125
+ .count { |facet| !facet.multi_content_view_environment? }
126
+ if single_env_host_count > 0
123
127
  unless options[:system_content_view_id] && options[:system_environment_id]
124
128
  fail _("Unable to reassign content hosts. Please provide system_content_view_id and system_environment_id.")
125
129
  end
@@ -132,7 +136,9 @@ module Katello
132
136
  end
133
137
  end
134
138
 
135
- if Katello::ActivationKey.with_content_views(view).with_environments(env_ids).count > 0
139
+ keys = Katello::ActivationKey.with_content_views(view).with_environments(env_ids)
140
+ single_env_keys_exist = keys.any? { |key| !key.multi_content_view_environment? }
141
+ if single_env_keys_exist
136
142
  # if we are reassigning activation key environments/ cv
137
143
  # make sure the activation key using present environments or cv are editable.
138
144
  unless options[:key_content_view_id] && options[:key_environment_id]
@@ -0,0 +1,25 @@
1
+ module Actions
2
+ module Helpers
3
+ module RollingCVRepos
4
+ def find_related_rolling_repos(repo)
5
+ repo.root.repositories.in_environment(repo.environment).where(
6
+ content_view_version: ::Katello::ContentViewVersion.where(content_view: ::Katello::ContentView.rolling)
7
+ )
8
+ end
9
+
10
+ def update_rolling_content_views(repo)
11
+ concurrence do
12
+ find_related_rolling_repos(repo).each do |rolling_repo|
13
+ plan_action(::Actions::Katello::ContentView::RefreshRollingRepo, rolling_repo, true)
14
+ end
15
+ end
16
+ end
17
+
18
+ def update_rolling_content_views_async(repo, contents_changed)
19
+ find_related_rolling_repos(repo).each do |rolling_repo|
20
+ ForemanTasks.async_task(::Actions::Katello::ContentView::RefreshRollingRepo, rolling_repo, contents_changed)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -2,6 +2,7 @@ module Actions
2
2
  module Katello
3
3
  module CapsuleContent
4
4
  class SyncCapsule < ::Actions::EntryAction
5
+ include Helpers::RollingCVRepos
5
6
  # rubocop:disable Metrics/MethodLength
6
7
  execution_plan_hooks.use :update_content_counts, :on => :success
7
8
  def plan(smart_proxy, options = {})
@@ -58,7 +59,11 @@ module Actions
58
59
  smart_proxy_helper.lifecycle_environment_check(environment, repository)
59
60
  if repository
60
61
  if skip_metatadata_check || !repository.smart_proxy_sync_histories.where(:smart_proxy_id => smart_proxy).any? { |sph| !sph.finished_at.nil? }
61
- [repository]
62
+ if repository.library_instance?
63
+ [repository] + find_related_rolling_repos(repository)
64
+ else
65
+ [repository]
66
+ end
62
67
  end
63
68
  else
64
69
  repositories = smart_proxy_helper.repositories_available_to_capsule(environment, content_view).by_rpm_count
@@ -0,0 +1,39 @@
1
+ module Actions
2
+ module Katello
3
+ module ContentView
4
+ class AddRollingRepoClone < Actions::EntryAction
5
+ def plan(content_view, repository_ids)
6
+ library = content_view.organization.library
7
+ clone_ids = []
8
+
9
+ concurrence do
10
+ ::Katello::Repository.where(id: repository_ids).each do |repository|
11
+ sequence do
12
+ clone = content_view.get_repo_clone(library, repository).first
13
+ if clone.nil?
14
+ clone = repository.build_clone(content_view: content_view, environment: library)
15
+ clone.save!
16
+ end
17
+ plan_action(RefreshRollingRepo, clone, false)
18
+
19
+ view_env_cp_id = content_view.content_view_environment(library).cp_id
20
+ content_id = repository.content_id
21
+ plan_action(Actions::Candlepin::Environment::AddContentToEnvironment, :view_env_cp_id => view_env_cp_id, :content_id => content_id)
22
+ clone_ids << clone.id
23
+ end
24
+ end
25
+ end
26
+ plan_self(repository_ids: clone_ids)
27
+ end
28
+
29
+ def run
30
+ if Setting[:foreman_proxy_content_auto_sync]
31
+ ::Katello::Repository.where(id: input[:repository_ids]).each do |repo|
32
+ ForemanTasks.async_task(::Actions::Katello::Repository::CapsuleSync, repo)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -4,6 +4,9 @@ module Actions
4
4
  class Create < Actions::Base
5
5
  def plan(content_view)
6
6
  content_view.save!
7
+ if content_view.rolling?
8
+ plan_action(AddToEnvironment, content_view.create_new_version, content_view.organization.library)
9
+ end
7
10
  end
8
11
 
9
12
  def humanized_name
@@ -0,0 +1,40 @@
1
+ module Actions
2
+ module Katello
3
+ module ContentView
4
+ class RefreshRollingRepo < Actions::EntryAction
5
+ def plan(repository, contents_changed)
6
+ action_subject repository
7
+ sequence do
8
+ plan_self(repository_id: repository.id, contents_changed: contents_changed)
9
+ plan_action(Pulp3::Repository::RefreshDistribution, repository, SmartProxy.pulp_primary)
10
+ plan_action(Repository::IndexContent, id: repository.id, source_repository_id: repository.library_instance.id)
11
+ plan_action(Actions::Katello::Applicability::Repository::Regenerate, :repo_ids => [repository.id])
12
+ end
13
+ end
14
+
15
+ def humanized_name
16
+ _('Refresh RollingCV Repo')
17
+ end
18
+
19
+ def run
20
+ repository = ::Katello::Repository.find(input[:repository_id])
21
+ library_instance = repository.library_instance
22
+ # ensure IndexContent is not skipped!
23
+ repository.last_contents_changed = DateTime.now if repository.version_href != library_instance.version_href
24
+
25
+ repository.version_href = library_instance.version_href
26
+ repository.publication_href = library_instance.publication_href
27
+ if repository.deb_using_structured_apt?
28
+ repository.content_id = library_instance.content_id
29
+ end
30
+ repository.save!
31
+ end
32
+
33
+ def finalize
34
+ repository = ::Katello::Repository.find(input[:repository_id])
35
+ repository.clear_smart_proxy_sync_histories if input[:contents_changed]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -119,13 +119,17 @@ module Actions
119
119
  end
120
120
  all_cv_envs = combined_cv_envs(cv_envs, versions)
121
121
 
122
- if all_cv_envs.flat_map(&:hosts).any? && !cve_exists?(options[:system_environment_id],
123
- options[:system_content_view_id])
122
+ single_env_hosts_exist = all_cv_envs.flat_map(&:hosts).any? do |host|
123
+ !host.content_facet.multi_content_view_environment?
124
+ end
125
+ if single_env_hosts_exist && !cve_exists?(options[:system_environment_id], options[:system_content_view_id])
124
126
  fail _("Unable to reassign systems. Please check system_content_view_id and system_environment_id.")
125
127
  end
126
128
 
127
- if all_cv_envs.flat_map(&:activation_keys).any? && !cve_exists?(options[:key_environment_id],
128
- options[:key_content_view_id])
129
+ single_env_keys_exist = all_cv_envs.flat_map(&:activation_keys).any? do |key|
130
+ !key.multi_content_view_environment?
131
+ end
132
+ if single_env_keys_exist && !cve_exists?(options[:key_environment_id], options[:key_content_view_id])
129
133
  fail _("Unable to reassign activation_keys. Please check activation_key_content_view_id and activation_key_environment_id.")
130
134
  end
131
135
  end
@@ -0,0 +1,28 @@
1
+ module Actions
2
+ module Katello
3
+ module ContentView
4
+ class RemoveRollingRepoClone < Actions::EntryAction
5
+ def plan(content_view, repository_ids)
6
+ library = content_view.organization.library
7
+
8
+ clone_repo_ids = []
9
+ concurrence do
10
+ ::Katello::Repository.where(id: repository_ids).each do |repository|
11
+ clone_repo = content_view.get_repo_clone(library, repository).first
12
+ next if clone_repo.nil?
13
+
14
+ clone_repo_ids << clone_repo.id
15
+ plan_action(Actions::Pulp3::Repository::DeleteDistributions, clone_repo.id, SmartProxy.pulp_primary)
16
+ end
17
+ plan_action(Candlepin::Environment::SetContent, content_view, library, content_view.content_view_environment(library))
18
+ end
19
+ plan_self(repository_ids: clone_repo_ids)
20
+ end
21
+
22
+ def run
23
+ ::Katello::Repository.where(id: input[:repository_ids]).destroy_all
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -28,6 +28,14 @@ module Actions
28
28
  end
29
29
  end
30
30
 
31
+ if content_view.rolling? && content_view_params.key?(:repository_ids)
32
+ repo_ids_to_add = content_view_params[:repository_ids] - content_view.repository_ids
33
+ repo_ids_to_remove = content_view.repository_ids - content_view_params[:repository_ids]
34
+
35
+ plan_action(AddRollingRepoClone, content_view, repo_ids_to_add) if repo_ids_to_add.any?
36
+ plan_action(RemoveRollingRepoClone, content_view, repo_ids_to_remove) if repo_ids_to_remove.any?
37
+ end
38
+
31
39
  content_view.update!(content_view_params)
32
40
  end
33
41
  end
@@ -21,11 +21,10 @@ module Actions
21
21
  errata = errata_match?(source_repo, target_repo)
22
22
  package_groups = package_groups_match?(source_repo, target_repo)
23
23
  distributions = distributions_match?(source_repo, target_repo)
24
- yum_metadata_files = yum_metadata_files_match?(source_repo, target_repo)
25
24
  checksum_match = (target_repo.saved_checksum_type == source_repo.saved_checksum_type)
26
25
 
27
26
  output[:checksum_match] = checksum_match
28
- output[:matching_content] = yum_metadata_files && srpms_match && rpms && errata && package_groups && distributions && target_repo_published && checksum_match
27
+ output[:matching_content] = srpms_match && rpms && errata && package_groups && distributions && target_repo_published && checksum_match
29
28
  end
30
29
 
31
30
  if source_repo.content_type == ::Katello::Repository::DEB_TYPE
@@ -66,12 +65,6 @@ module Actions
66
65
  def distributions_match?(source_repo, target_repo)
67
66
  source_repo.distribution_information == target_repo.distribution_information
68
67
  end
69
-
70
- def yum_metadata_files_match?(source_repo, target_repo)
71
- source_repo_items = source_repo.yum_metadata_files.pluck(:name, :checksum).sort.uniq
72
- target_repo_items = target_repo.yum_metadata_files.pluck(:name, :checksum).sort.uniq
73
- source_repo_items == target_repo_items
74
- end
75
68
  end
76
69
  end
77
70
  end
@@ -3,6 +3,8 @@ module Actions
3
3
  module Katello
4
4
  module Repository
5
5
  class ImportUpload < Actions::EntryAction
6
+ include Helpers::RollingCVRepos
7
+
6
8
  # rubocop:disable Metrics/MethodLength
7
9
  def plan(repository, uploads, options = {})
8
10
  action_subject(repository)
@@ -52,6 +54,9 @@ module Actions
52
54
  plan_action(Katello::Repository::MetadataGenerate, repository, force_publication: true) if generate_metadata
53
55
  plan_action(Actions::Katello::Applicability::Repository::Regenerate, :repo_ids => [repository.id]) if generate_applicability
54
56
  plan_self(repository_id: repository.id, sync_capsule: sync_capsule, upload_results: upload_results)
57
+
58
+ # Refresh rolling CVs that have this repository
59
+ update_rolling_content_views(repository)
55
60
  end
56
61
  end
57
62
  # rubocop:enable Metrics/MethodLength
@@ -5,6 +5,7 @@ module Actions
5
5
  class Sync < Actions::EntryAction
6
6
  extend ApipieDSL::Class
7
7
  include Helpers::Presenter
8
+ include Helpers::RollingCVRepos
8
9
  include ::Actions::ObservableAction
9
10
  middleware.use Actions::Middleware::ExecuteIfContentsChanged
10
11
 
@@ -62,16 +63,19 @@ module Actions
62
63
  end
63
64
 
64
65
  def run
66
+ end
67
+
68
+ def finalize
65
69
  repo = ::Katello::Repository.find(input[:id])
70
+ if repo
71
+ repo&.audit_sync
72
+ update_rolling_content_views_async(repo, input[:contents_changed])
73
+ end
66
74
  repo.clear_smart_proxy_sync_histories if input[:contents_changed]
67
75
  ForemanTasks.async_task(Repository::CapsuleSync, repo) if Setting[:foreman_proxy_content_auto_sync]
68
76
  rescue ::Katello::Errors::CapsuleCannotBeReached # skip any capsules that cannot be connected to
69
77
  end
70
78
 
71
- def finalize
72
- ::Katello::Repository.find(input[:id])&.audit_sync
73
- end
74
-
75
79
  def humanized_name
76
80
  if input && input[:validate_contents]
77
81
  _("Synchronize: Validate Content")
@@ -6,6 +6,8 @@ module Actions
6
6
  module Katello
7
7
  module Repository
8
8
  class UploadFiles < Actions::EntryAction
9
+ include Helpers::RollingCVRepos
10
+
9
11
  def plan(repository, files, content_type = nil, options = {})
10
12
  action_subject(repository)
11
13
  repository.check_ready_to_act!
@@ -38,6 +40,9 @@ module Actions
38
40
  plan_action(FinishUpload, repository, content_type: content_type, upload_actions: upload_actions)
39
41
  plan_self(tmp_files: tmp_files)
40
42
  plan_action(Actions::Katello::Applicability::Repository::Regenerate, :repo_ids => [repository.id]) if generate_applicability
43
+
44
+ # Refresh rolling CVs that have this repository
45
+ update_rolling_content_views(repository)
41
46
  end
42
47
  ensure
43
48
  # Delete tmp files when some exception occurred. Would be
@@ -46,7 +51,8 @@ module Actions
46
51
  end
47
52
 
48
53
  def run
49
- ForemanTasks.async_task(Repository::CapsuleSync, ::Katello::Repository.find(input[:repository][:id])) if Setting[:foreman_proxy_content_auto_sync]
54
+ repository = ::Katello::Repository.find(input[:repository][:id])
55
+ ForemanTasks.async_task(Repository::CapsuleSync, repository) if Setting[:foreman_proxy_content_auto_sync]
50
56
  rescue ::Katello::Errors::CapsuleCannotBeReached # skip any capsules that cannot be connected to
51
57
  end
52
58
 
@@ -6,13 +6,14 @@ module Actions
6
6
  def plan(proxy)
7
7
  if proxy.pulp3_enabled?
8
8
  sequence do
9
- plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanRepositoryVersions, proxy)
10
9
  if proxy.pulp_mirror?
11
10
  plan_action(Actions::Pulp3::OrphanCleanup::RemoveUnneededRepos, proxy)
12
- plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanDistributions, proxy)
13
11
  plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanAlternateContentSources, proxy)
14
12
  plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanRemotes, proxy)
15
13
  end
14
+ # Deleting repos causes orphaned distributions, so delete them before the distributions.
15
+ plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanDistributions, proxy)
16
+ plan_action(Actions::Pulp3::OrphanCleanup::DeleteOrphanRepositoryVersions, proxy)
16
17
  plan_action(Actions::Pulp3::OrphanCleanup::RemoveOrphans, proxy)
17
18
  plan_action(Actions::Pulp3::OrphanCleanup::PurgeCompletedTasks, proxy)
18
19
  end