katello 3.17.0 → 3.18.0

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

Potentially problematic release.


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

Files changed (272) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +38 -21
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +3 -1
  4. data/app/controllers/katello/api/v2/activation_keys_controller.rb +10 -15
  5. data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +1 -8
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +84 -0
  9. data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
  10. data/app/controllers/katello/api/v2/content_view_components_controller.rb +31 -14
  11. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +17 -8
  12. data/app/controllers/katello/api/v2/content_view_repositories_controller.rb +1 -0
  13. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +65 -71
  14. data/app/controllers/katello/api/v2/content_views_controller.rb +37 -26
  15. data/app/controllers/katello/api/v2/environments_controller.rb +8 -8
  16. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +5 -5
  17. data/app/controllers/katello/api/v2/host_collections_controller.rb +19 -16
  18. data/app/controllers/katello/api/v2/host_debs_controller.rb +1 -0
  19. data/app/controllers/katello/api/v2/host_errata_controller.rb +2 -2
  20. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +35 -6
  21. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
  22. data/app/controllers/katello/api/v2/products_controller.rb +9 -9
  23. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +1 -1
  24. data/app/controllers/katello/api/v2/repositories_controller.rb +10 -5
  25. data/app/controllers/katello/api/v2/repository_sets_controller.rb +24 -14
  26. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  27. data/app/controllers/katello/api/v2/sync_plans_controller.rb +8 -9
  28. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +9 -2
  29. data/app/controllers/katello/concerns/api/v2/authorization.rb +19 -5
  30. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +22 -18
  31. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +21 -0
  32. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +1 -1
  33. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +2 -1
  34. data/app/controllers/katello/concerns/registration_controller_extensions.rb +16 -0
  35. data/app/helpers/katello/katello_urls_helper.rb +5 -2
  36. data/app/lib/actions/candlepin/product/content_create.rb +2 -0
  37. data/app/lib/actions/candlepin/product/content_update.rb +2 -0
  38. data/app/lib/actions/helpers/smart_proxy_sync_history_helper.rb +24 -0
  39. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
  40. data/app/lib/actions/katello/capsule_content/sync.rb +1 -1
  41. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +16 -7
  42. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
  43. data/app/lib/actions/katello/content_view/publish.rb +9 -9
  44. data/app/lib/actions/katello/content_view_version/import.rb +8 -13
  45. data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
  46. data/app/lib/actions/katello/content_view_version/incremental_update.rb +18 -3
  47. data/app/lib/actions/katello/host/hypervisors_update.rb +18 -0
  48. data/app/lib/actions/katello/host/update_system_purpose.rb +31 -0
  49. data/app/lib/actions/katello/host/upload_package_profile.rb +3 -1
  50. data/app/lib/actions/katello/host/upload_profiles.rb +8 -6
  51. data/app/lib/actions/katello/organization/manifest_delete.rb +0 -1
  52. data/app/lib/actions/katello/organization/manifest_import.rb +0 -1
  53. data/app/lib/actions/katello/organization/manifest_refresh.rb +0 -1
  54. data/app/lib/actions/katello/product/content_create.rb +7 -6
  55. data/app/lib/actions/katello/repository/filtered_index_content.rb +10 -1
  56. data/app/lib/actions/katello/repository/import_upload.rb +4 -1
  57. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  58. data/app/lib/actions/katello/repository/sync.rb +3 -1
  59. data/app/lib/actions/katello/repository/update.rb +5 -1
  60. data/app/lib/actions/katello/repository/upload_files.rb +1 -0
  61. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +15 -0
  62. data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -2
  63. data/app/lib/actions/pulp/repository/distributor_publish.rb +1 -1
  64. data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -0
  65. data/app/lib/actions/pulp3/content_migration.rb +10 -0
  66. data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
  67. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
  68. data/app/lib/actions/pulp3/content_view_version/create_importer.rb +7 -3
  69. data/app/lib/actions/pulp3/content_view_version/export.rb +7 -1
  70. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -3
  71. data/app/lib/actions/pulp3/import_migration.rb +6 -1
  72. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
  73. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +38 -14
  74. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
  75. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +16 -10
  76. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +4 -1
  77. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
  78. data/app/lib/actions/pulp3/repository/commit_upload.rb +2 -1
  79. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  80. data/app/lib/actions/pulp3/repository/delete.rb +1 -1
  81. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -1
  82. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  83. data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
  84. data/app/lib/katello/resources/candlepin/consumer.rb +2 -2
  85. data/app/lib/katello/resources/candlepin/owner.rb +5 -0
  86. data/app/lib/katello/resources/candlepin/upstream_consumer.rb +6 -0
  87. data/app/lib/katello/resources/registry.rb +3 -3
  88. data/app/models/katello/authorization/activation_key.rb +4 -0
  89. data/app/models/katello/authorization/content_view.rb +13 -0
  90. data/app/models/katello/authorization/content_view_component.rb +15 -0
  91. data/app/models/katello/authorization/content_view_filter.rb +15 -0
  92. data/app/models/katello/authorization/content_view_version.rb +25 -2
  93. data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
  94. data/app/models/katello/authorization/gpg_key.rb +12 -4
  95. data/app/models/katello/authorization/lifecycle_environment.rb +8 -0
  96. data/app/models/katello/authorization/organization.rb +8 -0
  97. data/app/models/katello/authorization/sync_plan.rb +16 -0
  98. data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
  99. data/app/models/katello/concerns/organization_extensions.rb +4 -5
  100. data/app/models/katello/concerns/smart_proxy_extensions.rb +6 -4
  101. data/app/models/katello/content_migration_progress.rb +4 -0
  102. data/app/models/katello/content_view.rb +30 -4
  103. data/app/models/katello/content_view_component.rb +2 -0
  104. data/app/models/katello/content_view_filter.rb +5 -0
  105. data/app/models/katello/content_view_history.rb +2 -1
  106. data/app/models/katello/content_view_package_filter.rb +1 -1
  107. data/app/models/katello/content_view_puppet_module.rb +8 -0
  108. data/app/models/katello/content_view_repository.rb +13 -1
  109. data/app/models/katello/content_view_version_export_history.rb +8 -1
  110. data/app/models/katello/glue/candlepin/pool.rb +9 -14
  111. data/app/models/katello/glue/pulp/repo.rb +8 -0
  112. data/app/models/katello/gpg_key.rb +1 -1
  113. data/app/models/katello/ping.rb +8 -3
  114. data/app/models/katello/repository.rb +33 -0
  115. data/app/models/katello/root_repository.rb +26 -1
  116. data/app/models/katello/smart_proxy_sync_history.rb +8 -0
  117. data/app/services/katello/candlepin/event_handler.rb +2 -0
  118. data/app/services/katello/candlepin/message_handler.rb +34 -0
  119. data/app/services/katello/candlepin/upstream_consumer.rb +28 -0
  120. data/app/services/katello/host_status_manager.rb +9 -0
  121. data/app/services/katello/pulp3/api/apt.rb +57 -0
  122. data/app/services/katello/pulp3/api/core.rb +8 -0
  123. data/app/services/katello/pulp3/api/docker.rb +4 -0
  124. data/app/services/katello/pulp3/content_view_version/export.rb +125 -8
  125. data/app/services/katello/pulp3/content_view_version/import.rb +39 -34
  126. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +6 -16
  127. data/app/services/katello/pulp3/content_view_version/import_validator.rb +114 -0
  128. data/app/services/katello/pulp3/deb.rb +38 -0
  129. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  130. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  131. data/app/services/katello/pulp3/migration.rb +51 -10
  132. data/app/services/katello/pulp3/pulp_content_unit.rb +5 -0
  133. data/app/services/katello/pulp3/repository.rb +10 -4
  134. data/app/services/katello/pulp3/repository/ansible_collection.rb +9 -0
  135. data/app/services/katello/pulp3/repository/apt.rb +63 -0
  136. data/app/services/katello/pulp3/repository/docker.rb +9 -0
  137. data/app/services/katello/pulp3/repository/yum.rb +14 -9
  138. data/app/services/katello/pulp3/repository_mirror.rb +9 -4
  139. data/app/services/katello/pulp3/task.rb +4 -0
  140. data/app/services/katello/pulp3/task_group.rb +4 -0
  141. data/app/services/katello/repository_type.rb +2 -1
  142. data/app/services/katello/smart_proxy_helper.rb +9 -0
  143. data/app/views/dashboard/_subscription_widget.html.erb +0 -5
  144. data/app/views/foreman/hosts/_registration.html.erb +12 -0
  145. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -1
  146. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  147. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -1
  148. data/app/views/katello/layouts/react.html.erb +3 -2
  149. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
  150. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  151. data/config/routes/api/v2.rb +24 -2
  152. data/config/routes/overrides.rb +1 -0
  153. data/db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb +13 -0
  154. data/db/migrate/20201008204114_add_os_versions_to_katello_root_repositories.rb +5 -0
  155. data/db/migrate/20201012172713_remove_gpg_key_perms.rb +23 -0
  156. data/db/migrate/20201012192035_add_metadata_to_katello_content_view_version_export_history.rb +5 -0
  157. data/db/migrate/20201021150008_add_import_only_to_katello_content_view.rb +5 -0
  158. data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
  159. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  160. data/engines/bastion/app/assets/javascripts/bastion/components/notification.service.js +1 -1
  161. data/engines/bastion/app/assets/javascripts/bastion/components/nutupane.factory.js +8 -13
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-system-purpose-modal.controller.js +112 -0
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +78 -0
  164. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js +11 -0
  165. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +5 -0
  166. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-installed.controller.js +2 -42
  167. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +4 -0
  168. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +6 -2
  169. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +12 -0
  170. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +7 -7
  171. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +7 -1
  172. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +17 -3
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +16 -2
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +5 -0
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-details.controller.js +4 -0
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-info.html +6 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-bulk-action.factory.js +2 -1
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +92 -19
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/products-bulk-advanced-sync-modal.controller.js +6 -7
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +168 -155
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +17 -2
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +125 -113
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +15 -3
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/os-versions.service.js +46 -0
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +8 -1
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +1 -1
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-details.html +1 -1
  199. data/lib/katello/engine.rb +2 -0
  200. data/lib/katello/permission_creator.rb +98 -69
  201. data/lib/katello/permissions/host_permissions.rb +1 -0
  202. data/lib/katello/plugin.rb +10 -2
  203. data/lib/katello/repository_types/deb.rb +9 -1
  204. data/lib/katello/tasks/pulp3_migration.rake +17 -3
  205. data/lib/katello/tasks/pulp3_migration_abort.rake +22 -0
  206. data/lib/katello/tasks/pulp3_migration_stats.rake +41 -0
  207. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  208. data/lib/katello/tasks/reset.rake +2 -1
  209. data/lib/katello/tasks/upgrades/3.18/add_cvv_export_history_metadata.rb +18 -0
  210. data/lib/katello/version.rb +1 -1
  211. data/locale/action_names.rb +51 -44
  212. data/locale/bn/katello.po +279 -55
  213. data/locale/cs/katello.po +278 -51
  214. data/locale/de/katello.po +279 -52
  215. data/locale/en/katello.po +278 -49
  216. data/locale/es/katello.po +279 -51
  217. data/locale/fr/katello.po +279 -51
  218. data/locale/gu/katello.po +279 -55
  219. data/locale/hi/katello.po +279 -55
  220. data/locale/it/katello.po +279 -51
  221. data/locale/ja/katello.po +279 -52
  222. data/locale/katello.pot +1379 -971
  223. data/locale/kn/katello.po +279 -55
  224. data/locale/ko/katello.po +279 -51
  225. data/locale/mr/katello.po +279 -55
  226. data/locale/or/katello.po +279 -55
  227. data/locale/pa/katello.po +279 -55
  228. data/locale/pt/katello.po +278 -52
  229. data/locale/pt_BR/katello.po +279 -51
  230. data/locale/ru/katello.po +279 -51
  231. data/locale/ta/katello.po +279 -55
  232. data/locale/te/katello.po +279 -55
  233. data/locale/zh_CN/katello.po +279 -51
  234. data/locale/zh_TW/katello.po +279 -52
  235. data/webpack/components/ActionableDetail.js +2 -1
  236. data/webpack/components/Search/Search.js +1 -1
  237. data/webpack/components/Table/MainTable.js +6 -2
  238. data/webpack/components/Table/TableWrapper.js +46 -9
  239. data/webpack/scenes/ContentViews/ContentViewSelectors.js +7 -3
  240. data/webpack/scenes/ContentViews/ContentViewsConstants.js +8 -0
  241. data/webpack/scenes/ContentViews/ContentViewsPage.js +2 -9
  242. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +25 -3
  243. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +14 -4
  244. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +2 -1
  245. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +56 -0
  246. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +169 -0
  247. data/webpack/scenes/ContentViews/Details/Repositories/LastSync.js +47 -0
  248. data/webpack/scenes/ContentViews/Details/Repositories/RepoAddedStatus.js +17 -0
  249. data/webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js +23 -0
  250. data/webpack/scenes/ContentViews/Details/Repositories/SelectableDropdown.js +49 -0
  251. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.fixtures.json +154 -0
  252. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +131 -0
  253. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +3 -0
  254. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +4 -1
  255. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +2 -2
  256. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +29 -19
  257. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +17 -0
  258. data/webpack/scenes/Subscriptions/Manifest/ManifestConstants.js +4 -0
  259. data/webpack/scenes/Subscriptions/Manifest/SimpleContentAccess.js +19 -2
  260. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +9 -1
  261. data/webpack/scenes/Subscriptions/Manifest/index.js +2 -1
  262. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +1 -1
  263. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +3 -0
  264. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +8 -2
  265. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +3 -0
  266. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +3 -0
  267. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +6 -0
  268. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsSelectors.test.js.snap +6 -0
  269. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +1 -13
  270. data/webpack/test-utils/react-testing-lib-wrapper.js +3 -0
  271. metadata +74 -13
  272. data/webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js +0 -3
@@ -3,7 +3,6 @@ import React from 'react';
3
3
  import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
4
4
 
5
5
  import CONTENT_VIEWS_KEY from '../ContentViewsConstants';
6
- import { createContentViewsParams } from '../ContentViewsActions';
7
6
  import ContentViewsPage from '../../ContentViews';
8
7
  import api from '../../../services/api';
9
8
  import nock, {
@@ -136,7 +135,8 @@ test('Can handle pagination', async (done) => {
136
135
  // Match first page API request
137
136
  const firstPageScope = nockInstance
138
137
  .get(cvIndexPath)
139
- .query(createContentViewsParams())
138
+ // Using a custom query params matcher because parameters can be strings
139
+ .query(actualQueryObject => parseInt(actualQueryObject.page, 10) === 1)
140
140
  .reply(200, cvIndexFirstPage);
141
141
 
142
142
  // Match second page API request
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import { Grid, Col, Row, Tabs, Tab, Form, FormGroup, FormControl, ControlLabel } from 'react-bootstrap';
4
4
  import { Button, Spinner } from 'patternfly-react';
5
5
  import ForemanModal from 'foremanReact/components/ForemanModal';
6
+ import Slot from 'foremanReact/components/common/Slot';
6
7
  import { translate as __ } from 'foremanReact/common/I18n';
7
8
  import TooltipButton from '../../../components/TooltipButton';
8
9
  import { LoadingState } from '../../../components/LoadingState';
@@ -93,6 +94,7 @@ class ManageManifestModal extends Component {
93
94
  isManifestImported,
94
95
  canEditOrganizations,
95
96
  simpleContentAccess,
97
+ simpleContentAccessEligible,
96
98
  enableSimpleContentAccess,
97
99
  disableSimpleContentAccess,
98
100
  taskInProgress,
@@ -104,6 +106,8 @@ class ManageManifestModal extends Component {
104
106
  const showSubscriptionManifest = (canImportManifest || canDeleteManifest);
105
107
  const showManifestTab = (showRedHatProviderDetails || showSubscriptionManifest);
106
108
  const disableSCASwitch = (
109
+ // allow users to turn SCA off even if they are not eligible to turn it back on
110
+ (!simpleContentAccessEligible && !simpleContentAccess) ||
107
111
  disableManifestActions ||
108
112
  !isManifestImported ||
109
113
  actionInProgress ||
@@ -194,14 +198,17 @@ class ManageManifestModal extends Component {
194
198
  <Grid>
195
199
  <h3>{__('Subscription Manifest')}</h3>
196
200
  <hr />
197
- <Row>
198
- <SimpleContentAccess
199
- enableSimpleContentAccess={enableSimpleContentAccess}
200
- disableSimpleContentAccess={disableSimpleContentAccess}
201
- isSimpleContentAccessEnabled={simpleContentAccess}
202
- canToggleSimpleContentAccess={!disableSCASwitch}
203
- />
204
- </Row>
201
+ { isManifestImported &&
202
+ <Row>
203
+ <SimpleContentAccess
204
+ enableSimpleContentAccess={enableSimpleContentAccess}
205
+ disableSimpleContentAccess={disableSimpleContentAccess}
206
+ isSimpleContentAccessEnabled={simpleContentAccess}
207
+ canToggleSimpleContentAccess={!disableSCASwitch}
208
+ simpleContentAccessEligible={simpleContentAccessEligible}
209
+ />
210
+ </Row>
211
+ }
205
212
  <Row>
206
213
  <Col sm={5}>
207
214
  <strong>{__('Subscription Allocation')}</strong>
@@ -244,17 +251,17 @@ class ManageManifestModal extends Component {
244
251
  />
245
252
  }
246
253
  {canDeleteManifest &&
247
- <React.Fragment>
248
- <TooltipButton
249
- disabled={!isManifestImported || actionInProgress}
250
- bsStyle="danger"
251
- onClick={this.showDeleteManifestModal}
252
- title={__('Delete')}
253
- tooltipId="delete-manifest-button-tooltip"
254
- tooltipText={this.disabledTooltipText()}
255
- tooltipPlacement="top"
256
- />
257
- </React.Fragment>
254
+ <React.Fragment>
255
+ <TooltipButton
256
+ disabled={!isManifestImported || actionInProgress}
257
+ bsStyle="danger"
258
+ onClick={this.showDeleteManifestModal}
259
+ title={__('Delete')}
260
+ tooltipId="delete-manifest-button-tooltip"
261
+ tooltipText={this.disabledTooltipText()}
262
+ tooltipPlacement="top"
263
+ />
264
+ </React.Fragment>
258
265
  }
259
266
  </div>
260
267
  <ForemanModal title={__('Confirm delete manifest')} id={DELETE_MANIFEST_MODAL_ID}>
@@ -274,6 +281,7 @@ class ManageManifestModal extends Component {
274
281
  </FormGroup>
275
282
  </React.Fragment>
276
283
  }
284
+ <Slot id="katello-manage-manifest-form" multi />
277
285
  </Form>
278
286
  </Tab>
279
287
  }
@@ -325,6 +333,7 @@ ManageManifestModal.propTypes = {
325
333
  saveOrganization: PropTypes.func.isRequired,
326
334
  taskInProgress: PropTypes.bool.isRequired,
327
335
  simpleContentAccess: PropTypes.bool,
336
+ simpleContentAccessEligible: PropTypes.bool,
328
337
  manifestHistory: PropTypes.shape({
329
338
  loading: PropTypes.bool,
330
339
  // Disabling rule as existing code failed due to an eslint-plugin-react update
@@ -344,6 +353,7 @@ ManageManifestModal.defaultProps = {
344
353
  isManifestImported: false,
345
354
  canEditOrganizations: false,
346
355
  simpleContentAccess: false,
356
+ simpleContentAccessEligible: undefined,
347
357
  manifestActionStarted: false,
348
358
  };
349
359
 
@@ -22,6 +22,9 @@ import {
22
22
  DISABLE_SIMPLE_CONTENT_ACCESS_REQUEST,
23
23
  DISABLE_SIMPLE_CONTENT_ACCESS_SUCCESS,
24
24
  DISABLE_SIMPLE_CONTENT_ACCESS_FAILURE,
25
+ SIMPLE_CONTENT_ACCESS_ELIGIBLE_REQUEST,
26
+ SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS,
27
+ SIMPLE_CONTENT_ACCESS_ELIGIBLE_FAILURE,
25
28
  } from './ManifestConstants';
26
29
 
27
30
  export const uploadManifest = file => async (dispatch) => {
@@ -81,6 +84,20 @@ export const deleteManifest = (extendedParams = {}) => async (dispatch) => {
81
84
  }
82
85
  };
83
86
 
87
+ export const checkSimpleContentAccessEligible = () => async (dispatch) => {
88
+ dispatch({ type: SIMPLE_CONTENT_ACCESS_ELIGIBLE_REQUEST });
89
+
90
+ try {
91
+ const { data } = await api.get(`/organizations/${orgId()}/upstream_subscriptions/simple_content_access/eligible`, {});
92
+ return dispatch({
93
+ type: SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS,
94
+ response: data,
95
+ });
96
+ } catch (error) {
97
+ return dispatch(apiError(SIMPLE_CONTENT_ACCESS_ELIGIBLE_FAILURE, error));
98
+ }
99
+ };
100
+
84
101
  export const enableSimpleContentAccess = (extendedParams = {}) => async (dispatch) => {
85
102
  dispatch({ type: ENABLE_SIMPLE_CONTENT_ACCESS_REQUEST });
86
103
 
@@ -22,6 +22,10 @@ export const DISABLE_SIMPLE_CONTENT_ACCESS_REQUEST = 'DISABLE_SIMPLE_CONTENT_ACC
22
22
  export const DISABLE_SIMPLE_CONTENT_ACCESS_SUCCESS = 'DISABLE_SIMPLE_CONTENT_ACCESS_SUCCESS';
23
23
  export const DISABLE_SIMPLE_CONTENT_ACCESS_FAILURE = 'DISABLE_SIMPLE_CONTENT_ACCESS_FAILURE';
24
24
 
25
+ export const SIMPLE_CONTENT_ACCESS_ELIGIBLE_REQUEST = 'SIMPLE_CONTENT_ACCESS_ELIGIBLE_REQUEST';
26
+ export const SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS = 'SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS';
27
+ export const SIMPLE_CONTENT_ACCESS_ELIGIBLE_FAILURE = 'SIMPLE_CONTENT_ACCESS_ELIGIBLE_FAILURE';
28
+
25
29
  // Modal IDs
26
30
  export const MANAGE_MANIFEST_MODAL_ID = 'manageManifestModal';
27
31
  export const DELETE_MANIFEST_MODAL_ID = 'deleteManifestModal';
@@ -11,6 +11,7 @@ const SimpleContentAccess = (props) => {
11
11
  isSimpleContentAccessEnabled,
12
12
  enableSimpleContentAccess,
13
13
  disableSimpleContentAccess,
14
+ simpleContentAccessEligible,
14
15
  } = props;
15
16
 
16
17
  const toggleSimpleContentAccess = () => {
@@ -21,6 +22,17 @@ const SimpleContentAccess = (props) => {
21
22
  }
22
23
  };
23
24
 
25
+ const simpleContentAccessText = () => {
26
+ // don't show this text unless explicitly told to
27
+ if (simpleContentAccessEligible !== undefined) {
28
+ if (!simpleContentAccessEligible && !isSimpleContentAccessEnabled) {
29
+ return __('Simple Content Access has been disabled by the upstream organization administrator.');
30
+ }
31
+ }
32
+
33
+ return __('Toggling Simple Content Access will refresh your manifest.');
34
+ };
35
+
24
36
  return (
25
37
  <div id="simple-content-access">
26
38
  <Col sm={5}>
@@ -36,7 +48,7 @@ const SimpleContentAccess = (props) => {
36
48
  <OverlayTrigger
37
49
  overlay={
38
50
  <Tooltip id="sca-refresh-tooltip">
39
- {__('When Simple Content Access is enabled, hosts can consume from all repositories in their Content View regardless of subscription status.')}
51
+ {__('When Simple Content Access is enabled, hosts are not required to have subscriptions attached to access repositories.')}
40
52
  </Tooltip>
41
53
  }
42
54
  placement="bottom"
@@ -61,7 +73,7 @@ const SimpleContentAccess = (props) => {
61
73
  />
62
74
  </div>
63
75
  <div>
64
- <i>{__('Toggling Simple Content Access will refresh your manifest.')}</i>
76
+ <i>{simpleContentAccessText()}</i>
65
77
  </div>
66
78
  </Col>
67
79
  </div>
@@ -73,6 +85,11 @@ SimpleContentAccess.propTypes = {
73
85
  disableSimpleContentAccess: PropTypes.func.isRequired,
74
86
  isSimpleContentAccessEnabled: PropTypes.bool.isRequired,
75
87
  canToggleSimpleContentAccess: PropTypes.bool.isRequired,
88
+ simpleContentAccessEligible: PropTypes.bool,
89
+ };
90
+
91
+ SimpleContentAccess.defaultProps = {
92
+ simpleContentAccessEligible: undefined,
76
93
  };
77
94
 
78
95
  export default SimpleContentAccess;
@@ -9,7 +9,15 @@ import api from '../../../../services/api';
9
9
  afterEach(cleanup);
10
10
 
11
11
  const noop = jest.fn();
12
- const organization = { id: 1, redhat_repository_url: 'https://redhat.com' };
12
+ const organization = {
13
+ id: 1,
14
+ redhat_repository_url: 'https://redhat.com',
15
+ owner_details: {
16
+ upstreamConsumer: {
17
+ webUrl: 'https://example.com/',
18
+ },
19
+ },
20
+ };
13
21
 
14
22
  const defaultProps = {
15
23
  disableManifestActions: false,
@@ -7,7 +7,7 @@ import * as organizationActions from '../../Organizations/OrganizationActions';
7
7
  import * as tasksActions from '../../Tasks/TaskActions';
8
8
  import history from './ManifestHistoryReducer';
9
9
  import { selectSimpleContentAccessEnabled, selectIsManifestImported } from '../../Organizations/OrganizationSelectors';
10
- import { selectManifestActionStarted } from '../SubscriptionsSelectors';
10
+ import { selectManifestActionStarted, selectSimpleContentAccessEligible } from '../SubscriptionsSelectors';
11
11
 
12
12
  import ManifestModal from './ManageManifestModal';
13
13
 
@@ -21,6 +21,7 @@ const mapStateToProps = state => ({
21
21
  isManifestImported: selectIsManifestImported(state),
22
22
  modalOpenState: state.foremanModals.ManageManifestModal,
23
23
  manifestActionStarted: selectManifestActionStarted(state),
24
+ simpleContentAccessEligible: selectSimpleContentAccessEligible(state),
24
25
  });
25
26
 
26
27
  // map action dispatchers to props
@@ -37,7 +37,7 @@ export const SUBSCRIPTIONS_CLOSE_DELETE_MODAL = 'SUBSCRIPTIONS_CLOSE_DELETE_MODA
37
37
  export const SUBSCRIPTIONS_DISABLE_DELETE_BUTTON = 'SUBSCRIPTIONS_DISABLE_DELETE_BUTTON';
38
38
  export const SUBSCRIPTIONS_ENABLE_DELETE_BUTTON = 'SUBSCRIPTIONS_ENABLE_DELETE_BUTTON';
39
39
 
40
- export const SUBSCRIPTION_WATCH_URL = 'https://cloud.redhat.com/subscriptions/rhel-sw/all';
40
+ export const SUBSCRIPTION_WATCH_URL = 'https://access.redhat.com/articles/subscription-watch';
41
41
 
42
42
  export const MANIFEST_DELETE_TASK_LABEL = 'Actions::Katello::Organization::ManifestDelete';
43
43
 
@@ -41,6 +41,7 @@ import {
41
41
  ENABLE_SIMPLE_CONTENT_ACCESS_REQUEST,
42
42
  ENABLE_SIMPLE_CONTENT_ACCESS_SUCCESS,
43
43
  DISABLE_SIMPLE_CONTENT_ACCESS_SUCCESS,
44
+ SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS,
44
45
  UPLOAD_MANIFEST_FAILURE,
45
46
  UPLOAD_MANIFEST_REQUEST,
46
47
  DELETE_MANIFEST_FAILURE,
@@ -68,6 +69,8 @@ const initialState = Immutable({
68
69
 
69
70
  export default (state = initialState, action) => {
70
71
  switch (action.type) {
72
+ case SIMPLE_CONTENT_ACCESS_ELIGIBLE_SUCCESS:
73
+ return state.set('simpleContentAccessEligible', action.response.simple_content_access_eligible);
71
74
  case PING_UPSTREAM_SUBSCRIPTIONS_SUCCESS:
72
75
  return state.set('hasUpstreamConnection', true);
73
76
  case PING_UPSTREAM_SUBSCRIPTIONS_FAILURE:
@@ -51,6 +51,7 @@ class SubscriptionsPage extends Component {
51
51
  settings,
52
52
  subscriptions,
53
53
  task,
54
+ checkSimpleContentAccessEligible,
54
55
  } = this.props;
55
56
 
56
57
  const { disconnected } = settings;
@@ -79,6 +80,10 @@ class SubscriptionsPage extends Component {
79
80
  }
80
81
 
81
82
  if (hasUpstreamConnection) {
83
+ if (hasUpstreamConnection !== prevProps.hasUpstreamConnection) {
84
+ checkSimpleContentAccessEligible();
85
+ }
86
+
82
87
  const subscriptionsChanged = subscriptions.results !== prevProps.subscriptions.results;
83
88
  if (subscriptionsChanged || !this.state.availableQuantitiesLoaded) {
84
89
  const poolIds = filterRHSubscriptions(subscriptions.results).map(subs => subs.id);
@@ -267,8 +272,8 @@ class SubscriptionsPage extends Component {
267
272
  {simpleContentAccess && (
268
273
  <Alert type="info">
269
274
  This organization has Simple Content Access enabled.
270
- Hosts can consume from all repositories in their Content View regardless of
271
- subscription status. <br />
275
+ Hosts are not required to have subscriptions attached to access repositories.
276
+ <br />
272
277
  Learn more about your overall subscription usage at
273
278
  {' '}<a href={SUBSCRIPTION_WATCH_URL} target="_blank" rel="noreferrer">Subscription Watch</a>.
274
279
  </Alert>
@@ -305,6 +310,7 @@ class SubscriptionsPage extends Component {
305
310
 
306
311
  SubscriptionsPage.propTypes = {
307
312
  pingUpstreamSubscriptions: PropTypes.func.isRequired,
313
+ checkSimpleContentAccessEligible: PropTypes.func.isRequired,
308
314
  loadSubscriptions: PropTypes.func.isRequired,
309
315
  loadAvailableQuantities: PropTypes.func.isRequired,
310
316
  uploadManifest: PropTypes.func.isRequired,
@@ -29,3 +29,6 @@ export const selectManifestActionStarted = state =>
29
29
 
30
30
  export const selectHasUpstreamConnection = state =>
31
31
  selectSubscriptionsState(state).hasUpstreamConnection;
32
+
33
+ export const selectSimpleContentAccessEligible = state =>
34
+ selectSubscriptionsState(state).simpleContentAccessEligible;
@@ -6,6 +6,7 @@ import SubscriptionsPage from '../SubscriptionsPage';
6
6
  import { successState, settingsSuccessState, permissionDeniedState } from './subscriptions.fixtures';
7
7
  import { loadAvailableQuantities, loadSubscriptions, updateQuantity, loadTableColumns } from '../SubscriptionActions';
8
8
  import { pingUpstreamSubscriptions } from '../UpstreamSubscriptions/UpstreamSubscriptionsActions';
9
+ import { checkSimpleContentAccessEligible } from '../Manifest/ManifestActions';
9
10
  import { createColumns, updateColumns } from '../../../scenes/Settings/Tables/TableActions';
10
11
 
11
12
  jest.mock('foremanReact/components/PermissionDenied');
@@ -43,6 +44,7 @@ describe('subscriptions page', () => {
43
44
  loadSubscriptions={loadSubscriptions}
44
45
  loadAvailableQuantities={loadAvailableQuantities}
45
46
  pingUpstreamSubscriptions={pingUpstreamSubscriptions}
47
+ checkSimpleContentAccessEligible={checkSimpleContentAccessEligible}
46
48
  updateQuantity={updateQuantity}
47
49
  handleStartTask={handleStartTask}
48
50
  handleFinishedTask={handleFinishedTask}
@@ -78,6 +80,7 @@ describe('subscriptions page', () => {
78
80
  loadSubscriptions={loadSubscriptions}
79
81
  loadAvailableQuantities={loadAvailableQuantities}
80
82
  pingUpstreamSubscriptions={pingUpstreamSubscriptions}
83
+ checkSimpleContentAccessEligible={checkSimpleContentAccessEligible}
81
84
  updateQuantity={updateQuantity}
82
85
  handleStartTask={handleStartTask}
83
86
  handleFinishedTask={handleFinishedTask}
@@ -5,6 +5,8 @@ import {
5
5
  selectDeleteModalOpened,
6
6
  selectDeleteButtonDisabled,
7
7
  selectSubscriptionsTask,
8
+ selectHasUpstreamConnection,
9
+ selectSimpleContentAccessEligible,
8
10
  } from '../SubscriptionsSelectors';
9
11
 
10
12
  const state = {
@@ -14,6 +16,8 @@ const state = {
14
16
  deleteModalOpened: false,
15
17
  taskModalOpened: false,
16
18
  deleteButtonDisabled: true,
19
+ hasUpstreamConnection: false,
20
+ simpleContentAccessEligible: false,
17
21
  task: {},
18
22
  },
19
23
  },
@@ -25,6 +29,8 @@ const fixtures = {
25
29
  'should select delete-modal-opened': () => selectDeleteModalOpened(state),
26
30
  'should select delete-button-disabled': () => selectDeleteButtonDisabled(state),
27
31
  'should select subscriptions task': () => selectSubscriptionsTask(state),
32
+ 'should select whether we have an upstream connection': () => selectHasUpstreamConnection(state),
33
+ 'should select whether we are simple content access eligible': () => selectSimpleContentAccessEligible(state),
28
34
  };
29
35
 
30
36
  describe('Subscriptions selectors', () => testSelectorsSnapshotWithFixtures(fixtures));
@@ -12,8 +12,14 @@ exports[`Subscriptions selectors should select the subscriptions state 1`] = `
12
12
  Object {
13
13
  "deleteButtonDisabled": true,
14
14
  "deleteModalOpened": false,
15
+ "hasUpstreamConnection": false,
15
16
  "searchQuery": "some-query",
17
+ "simpleContentAccessEligible": false,
16
18
  "task": Object {},
17
19
  "taskModalOpened": false,
18
20
  }
19
21
  `;
22
+
23
+ exports[`Subscriptions selectors should select whether we are simple content access eligible 1`] = `false`;
24
+
25
+ exports[`Subscriptions selectors should select whether we have an upstream connection 1`] = `false`;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { Row, Col, Form, FormGroup, Button, OverlayTrigger, Tooltip, Icon } from 'patternfly-react';
3
+ import { Row, Col, Form, FormGroup, Button } from 'patternfly-react';
4
4
  import { LinkContainer } from 'react-router-bootstrap';
5
5
  import { noop } from 'foremanReact/common/helpers';
6
6
  import { translate as __ } from 'foremanReact/common/I18n';
@@ -67,18 +67,6 @@ const SubscriptionsToolbar = ({
67
67
  rel="noreferrer"
68
68
  >
69
69
  {__('Subscription Watch')}
70
- <OverlayTrigger
71
- overlay={
72
- <Tooltip id="sub-watch-tooltip">
73
- {__('Learn more about your overall subscription usage (opens in a new tab)')}
74
- </Tooltip>
75
- }
76
- placement="bottom"
77
- trigger={['hover', 'focus']}
78
- rootClose={false}
79
- >
80
- <Icon type="pf" name="info" />
81
- </OverlayTrigger>
82
70
  </a>
83
71
  }
84
72
 
@@ -5,6 +5,7 @@ import React from 'react';
5
5
  import thunk from 'redux-thunk';
6
6
  import Immutable from 'seamless-immutable';
7
7
  import { APIMiddleware, reducers as apiReducer } from 'foremanReact/redux/API';
8
+ import { reducers as fillReducers } from 'foremanReact/components/common/Fill';
8
9
  import { reducers as foremanModalReducer } from 'foremanReact/components/ForemanModal';
9
10
  import { STATUS } from 'foremanReact/constants';
10
11
  import { render, waitFor } from '@testing-library/react';
@@ -33,6 +34,7 @@ function renderWithRedux(
33
34
  katello: allKatelloReducers,
34
35
  ...apiReducer,
35
36
  ...foremanModalReducer,
37
+ ...fillReducers,
36
38
  });
37
39
 
38
40
  // Namespacing the initial state as well
@@ -45,6 +47,7 @@ function renderWithRedux(
45
47
  settings: initialSettingsState,
46
48
  },
47
49
  },
50
+ extendable: {},
48
51
  ...initialState,
49
52
  });
50
53
  const middlewares = applyMiddleware(thunk, APIMiddleware);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.17.0
4
+ version: 3.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - N/A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-06 00:00:00.000000000 Z
11
+ date: 2020-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -263,7 +263,7 @@ dependencies:
263
263
  version: 3.6.0
264
264
  - - "<"
265
265
  - !ruby/object:Gem::Version
266
- version: 3.7.0
266
+ version: 3.8.0
267
267
  type: :runtime
268
268
  prerelease: false
269
269
  version_requirements: !ruby/object:Gem::Requirement
@@ -273,7 +273,7 @@ dependencies:
273
273
  version: 3.6.0
274
274
  - - "<"
275
275
  - !ruby/object:Gem::Version
276
- version: 3.7.0
276
+ version: 3.8.0
277
277
  - !ruby/object:Gem::Dependency
278
278
  name: pulp_file_client
279
279
  requirement: !ruby/object:Gem::Requirement
@@ -283,7 +283,7 @@ dependencies:
283
283
  version: 1.2.0
284
284
  - - "<"
285
285
  - !ruby/object:Gem::Version
286
- version: 1.3.0
286
+ version: 1.4.0
287
287
  type: :runtime
288
288
  prerelease: false
289
289
  version_requirements: !ruby/object:Gem::Requirement
@@ -293,7 +293,7 @@ dependencies:
293
293
  version: 1.2.0
294
294
  - - "<"
295
295
  - !ruby/object:Gem::Version
296
- version: 1.3.0
296
+ version: 1.4.0
297
297
  - !ruby/object:Gem::Dependency
298
298
  name: pulp_ansible_client
299
299
  requirement: !ruby/object:Gem::Requirement
@@ -303,7 +303,7 @@ dependencies:
303
303
  version: '0.2'
304
304
  - - "<"
305
305
  - !ruby/object:Gem::Version
306
- version: '0.4'
306
+ version: '0.5'
307
307
  type: :runtime
308
308
  prerelease: false
309
309
  version_requirements: !ruby/object:Gem::Requirement
@@ -313,7 +313,7 @@ dependencies:
313
313
  version: '0.2'
314
314
  - - "<"
315
315
  - !ruby/object:Gem::Version
316
- version: '0.4'
316
+ version: '0.5'
317
317
  - !ruby/object:Gem::Dependency
318
318
  name: pulp_container_client
319
319
  requirement: !ruby/object:Gem::Requirement
@@ -323,7 +323,7 @@ dependencies:
323
323
  version: 2.0.0
324
324
  - - "<"
325
325
  - !ruby/object:Gem::Version
326
- version: 2.1.0
326
+ version: 2.2.0
327
327
  type: :runtime
328
328
  prerelease: false
329
329
  version_requirements: !ruby/object:Gem::Requirement
@@ -333,7 +333,27 @@ dependencies:
333
333
  version: 2.0.0
334
334
  - - "<"
335
335
  - !ruby/object:Gem::Version
336
- version: 2.1.0
336
+ version: 2.2.0
337
+ - !ruby/object:Gem::Dependency
338
+ name: pulp_deb_client
339
+ requirement: !ruby/object:Gem::Requirement
340
+ requirements:
341
+ - - ">="
342
+ - !ruby/object:Gem::Version
343
+ version: 2.6.0
344
+ - - "<"
345
+ - !ruby/object:Gem::Version
346
+ version: 2.8.0
347
+ type: :runtime
348
+ prerelease: false
349
+ version_requirements: !ruby/object:Gem::Requirement
350
+ requirements:
351
+ - - ">="
352
+ - !ruby/object:Gem::Version
353
+ version: 2.6.0
354
+ - - "<"
355
+ - !ruby/object:Gem::Version
356
+ version: 2.8.0
337
357
  - !ruby/object:Gem::Dependency
338
358
  name: pulp_rpm_client
339
359
  requirement: !ruby/object:Gem::Requirement
@@ -343,7 +363,7 @@ dependencies:
343
363
  version: 3.6.2
344
364
  - - "<"
345
365
  - !ruby/object:Gem::Version
346
- version: 3.7.0
366
+ version: 3.8.0
347
367
  type: :runtime
348
368
  prerelease: false
349
369
  version_requirements: !ruby/object:Gem::Requirement
@@ -353,7 +373,7 @@ dependencies:
353
373
  version: 3.6.2
354
374
  - - "<"
355
375
  - !ruby/object:Gem::Version
356
- version: 3.7.0
376
+ version: 3.8.0
357
377
  - !ruby/object:Gem::Dependency
358
378
  name: pulp_2to3_migration_client
359
379
  requirement: !ruby/object:Gem::Requirement
@@ -700,6 +720,9 @@ files:
700
720
  - app/controllers/katello/api/v2/capsule_content_controller.rb
701
721
  - app/controllers/katello/api/v2/capsules_controller.rb
702
722
  - app/controllers/katello/api/v2/content_credentials_controller.rb
723
+ - app/controllers/katello/api/v2/content_export_incrementals_controller.rb
724
+ - app/controllers/katello/api/v2/content_exports_controller.rb
725
+ - app/controllers/katello/api/v2/content_imports_controller.rb
703
726
  - app/controllers/katello/api/v2/content_uploads_controller.rb
704
727
  - app/controllers/katello/api/v2/content_view_components_controller.rb
705
728
  - app/controllers/katello/api/v2/content_view_filter_rules_controller.rb
@@ -753,12 +776,14 @@ files:
753
776
  - app/controllers/katello/concerns/api/v2/content_overrides_controller.rb
754
777
  - app/controllers/katello/concerns/api/v2/hostgroups_controller_extensions.rb
755
778
  - app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb
779
+ - app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb
756
780
  - app/controllers/katello/concerns/api/v2/repository_content_controller.rb
757
781
  - app/controllers/katello/concerns/api/v2/smart_proxies_controller_extensions.rb
758
782
  - app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb
759
783
  - app/controllers/katello/concerns/filtered_auto_complete_search.rb
760
784
  - app/controllers/katello/concerns/hosts_controller_extensions.rb
761
785
  - app/controllers/katello/concerns/organizations_controller_extensions.rb
786
+ - app/controllers/katello/concerns/registration_controller_extensions.rb
762
787
  - app/controllers/katello/concerns/smart_proxies_controller_extensions.rb
763
788
  - app/controllers/katello/errata_controller.rb
764
789
  - app/controllers/katello/http_errors.rb
@@ -821,6 +846,7 @@ files:
821
846
  - app/lib/actions/helpers/notifications.rb
822
847
  - app/lib/actions/helpers/output_propagator.rb
823
848
  - app/lib/actions/helpers/presenter.rb
849
+ - app/lib/actions/helpers/smart_proxy_sync_history_helper.rb
824
850
  - app/lib/actions/katello/activation_key/create.rb
825
851
  - app/lib/actions/katello/activation_key/destroy.rb
826
852
  - app/lib/actions/katello/activation_key/reassign.rb
@@ -861,6 +887,7 @@ files:
861
887
  - app/lib/actions/katello/content_view_version/destroy.rb
862
888
  - app/lib/actions/katello/content_view_version/export.rb
863
889
  - app/lib/actions/katello/content_view_version/import.rb
890
+ - app/lib/actions/katello/content_view_version/import_library.rb
864
891
  - app/lib/actions/katello/content_view_version/incremental_update.rb
865
892
  - app/lib/actions/katello/content_view_version/republish_repositories.rb
866
893
  - app/lib/actions/katello/environment/destroy.rb
@@ -888,6 +915,7 @@ files:
888
915
  - app/lib/actions/katello/host/update_content_overrides.rb
889
916
  - app/lib/actions/katello/host/update_content_view.rb
890
917
  - app/lib/actions/katello/host/update_release_version.rb
918
+ - app/lib/actions/katello/host/update_system_purpose.rb
891
919
  - app/lib/actions/katello/host/upload_package_profile.rb
892
920
  - app/lib/actions/katello/host/upload_profiles.rb
893
921
  - app/lib/actions/katello/organization/create.rb
@@ -973,6 +1001,7 @@ files:
973
1001
  - app/lib/actions/middleware/pulp3_services_check.rb
974
1002
  - app/lib/actions/middleware/pulp_services_check.rb
975
1003
  - app/lib/actions/middleware/record_fixtures.rb
1004
+ - app/lib/actions/middleware/record_smart_proxy_sync_history.rb
976
1005
  - app/lib/actions/middleware/remote_action.rb
977
1006
  - app/lib/actions/middleware/skip_if_matching_content.rb
978
1007
  - app/lib/actions/pulp/abstract.rb
@@ -1042,6 +1071,7 @@ files:
1042
1071
  - app/lib/actions/pulp3/content_guard/refresh.rb
1043
1072
  - app/lib/actions/pulp3/content_guard/refresh_all_distributions.rb
1044
1073
  - app/lib/actions/pulp3/content_migration.rb
1074
+ - app/lib/actions/pulp3/content_migration_presenter.rb
1045
1075
  - app/lib/actions/pulp3/content_view/delete_repository_references.rb
1046
1076
  - app/lib/actions/pulp3/content_view_version/create_exporter.rb
1047
1077
  - app/lib/actions/pulp3/content_view_version/create_importer.rb
@@ -1052,6 +1082,7 @@ files:
1052
1082
  - app/lib/actions/pulp3/import_migration.rb
1053
1083
  - app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb
1054
1084
  - app/lib/actions/pulp3/orchestration/content_view_version/export.rb
1085
+ - app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb
1055
1086
  - app/lib/actions/pulp3/orchestration/content_view_version/import.rb
1056
1087
  - app/lib/actions/pulp3/orchestration/orphan_cleanup/remove_orphans.rb
1057
1088
  - app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb
@@ -1103,6 +1134,7 @@ files:
1103
1134
  - app/lib/actions/pulp3/repository/update_remote.rb
1104
1135
  - app/lib/actions/pulp3/repository/update_repository.rb
1105
1136
  - app/lib/actions/pulp3/repository/upload_file.rb
1137
+ - app/lib/actions/pulp3/repository/upload_tag.rb
1106
1138
  - app/lib/katello/README
1107
1139
  - app/lib/katello/api/constraints/activation_key_constraint.rb
1108
1140
  - app/lib/katello/api/mapper_extensions.rb
@@ -1197,7 +1229,9 @@ files:
1197
1229
  - app/models/katello/ansible_tag.rb
1198
1230
  - app/models/katello/authorization/activation_key.rb
1199
1231
  - app/models/katello/authorization/content_view.rb
1232
+ - app/models/katello/authorization/content_view_component.rb
1200
1233
  - app/models/katello/authorization/content_view_environment.rb
1234
+ - app/models/katello/authorization/content_view_filter.rb
1201
1235
  - app/models/katello/authorization/content_view_history.rb
1202
1236
  - app/models/katello/authorization/content_view_version.rb
1203
1237
  - app/models/katello/authorization/content_view_version_export_history.rb
@@ -1239,6 +1273,7 @@ files:
1239
1273
  - app/models/katello/content_facet_applicable_rpm.rb
1240
1274
  - app/models/katello/content_facet_erratum.rb
1241
1275
  - app/models/katello/content_facet_repository.rb
1276
+ - app/models/katello/content_migration_progress.rb
1242
1277
  - app/models/katello/content_override.rb
1243
1278
  - app/models/katello/content_view.rb
1244
1279
  - app/models/katello/content_view_component.rb
@@ -1368,6 +1403,7 @@ files:
1368
1403
  - app/models/katello/rhsm_fact_parser.rb
1369
1404
  - app/models/katello/root_repository.rb
1370
1405
  - app/models/katello/rpm.rb
1406
+ - app/models/katello/smart_proxy_sync_history.rb
1371
1407
  - app/models/katello/srpm.rb
1372
1408
  - app/models/katello/subscription.rb
1373
1409
  - app/models/katello/subscription_facet_activation_key.rb
@@ -1407,6 +1443,7 @@ files:
1407
1443
  - app/services/katello/candlepin/message_handler.rb
1408
1444
  - app/services/katello/candlepin/pool_service.rb
1409
1445
  - app/services/katello/candlepin/system_purpose.rb
1446
+ - app/services/katello/candlepin/upstream_consumer.rb
1410
1447
  - app/services/katello/candlepin_event_listener.rb
1411
1448
  - app/services/katello/event_daemon.rb
1412
1449
  - app/services/katello/event_monitor/poller_thread.rb
@@ -1452,6 +1489,7 @@ files:
1452
1489
  - app/services/katello/pulp/yum_metadata_file.rb
1453
1490
  - app/services/katello/pulp3/ansible_collection.rb
1454
1491
  - app/services/katello/pulp3/api/ansible_collection.rb
1492
+ - app/services/katello/pulp3/api/apt.rb
1455
1493
  - app/services/katello/pulp3/api/content_guard.rb
1456
1494
  - app/services/katello/pulp3/api/core.rb
1457
1495
  - app/services/katello/pulp3/api/docker.rb
@@ -1461,6 +1499,8 @@ files:
1461
1499
  - app/services/katello/pulp3/content_view_version/export.rb
1462
1500
  - app/services/katello/pulp3/content_view_version/import.rb
1463
1501
  - app/services/katello/pulp3/content_view_version/import_export_common.rb
1502
+ - app/services/katello/pulp3/content_view_version/import_validator.rb
1503
+ - app/services/katello/pulp3/deb.rb
1464
1504
  - app/services/katello/pulp3/distribution.rb
1465
1505
  - app/services/katello/pulp3/docker_blob.rb
1466
1506
  - app/services/katello/pulp3/docker_manifest.rb
@@ -1476,6 +1516,7 @@ files:
1476
1516
  - app/services/katello/pulp3/pulp_content_unit.rb
1477
1517
  - app/services/katello/pulp3/repository.rb
1478
1518
  - app/services/katello/pulp3/repository/ansible_collection.rb
1519
+ - app/services/katello/pulp3/repository/apt.rb
1479
1520
  - app/services/katello/pulp3/repository/docker.rb
1480
1521
  - app/services/katello/pulp3/repository/file.rb
1481
1522
  - app/services/katello/pulp3/repository/yum.rb
@@ -1517,6 +1558,7 @@ files:
1517
1558
  - app/views/dashboard/_subscription_status_widget.html.erb
1518
1559
  - app/views/dashboard/_subscription_widget.html.erb
1519
1560
  - app/views/dashboard/_sync_widget.html.erb
1561
+ - app/views/foreman/hosts/_registration.html.erb
1520
1562
  - app/views/foreman/job_templates/install_errata.erb
1521
1563
  - app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb
1522
1564
  - app/views/foreman/job_templates/install_group.erb
@@ -2092,6 +2134,12 @@ files:
2092
2134
  - db/migrate/20200820145217_add_download_concurrency_to_katello_root_repositories.rb
2093
2135
  - db/migrate/20200910140340_remove_distribution_uuid.rb
2094
2136
  - db/migrate/20200914200906_remove_auto_enabled.rb
2137
+ - db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb
2138
+ - db/migrate/20201008204114_add_os_versions_to_katello_root_repositories.rb
2139
+ - db/migrate/20201012172713_remove_gpg_key_perms.rb
2140
+ - db/migrate/20201012192035_add_metadata_to_katello_content_view_version_export_history.rb
2141
+ - db/migrate/20201021150008_add_import_only_to_katello_content_view.rb
2142
+ - db/migrate/20201119211133_pulp3_migration_progress.rb
2095
2143
  - db/seeds.d/101-locations.rb
2096
2144
  - db/seeds.d/102-organizations.rb
2097
2145
  - db/seeds.d/104-proxy.rb
@@ -3927,6 +3975,7 @@ files:
3927
3975
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-release-version-modal.controller.js
3928
3976
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-repository-sets-modal.controller.js
3929
3977
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-subscriptions-modal.controller.js
3978
+ - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-system-purpose-modal.controller.js
3930
3979
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js
3931
3980
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-host-bulk-module-streams-modal.html
3932
3981
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-destroy-modal.html
@@ -3937,6 +3986,7 @@ files:
3937
3986
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-release-version-modal.html
3938
3987
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-repository-sets-modal.html
3939
3988
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-subscriptions-modal.html
3989
+ - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html
3940
3990
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html
3941
3991
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js
3942
3992
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-client.directive.js
@@ -4309,6 +4359,7 @@ files:
4309
4359
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/http-proxy-service.js
4310
4360
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js
4311
4361
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html
4362
+ - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/os-versions.service.js
4312
4363
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/ostree-upstream-sync-policy.service.js
4313
4364
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.module.js
4314
4365
  - engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js
@@ -4442,6 +4493,8 @@ files:
4442
4493
  - lib/katello/tasks/job_templates.rake
4443
4494
  - lib/katello/tasks/pulp3_content_switchover.rake
4444
4495
  - lib/katello/tasks/pulp3_migration.rake
4496
+ - lib/katello/tasks/pulp3_migration_abort.rake
4497
+ - lib/katello/tasks/pulp3_migration_stats.rake
4445
4498
  - lib/katello/tasks/pulp3_post_migration_check.rake
4446
4499
  - lib/katello/tasks/receptor/extract_orgs.rake
4447
4500
  - lib/katello/tasks/regenerate_ueber_certs.rake
@@ -4464,6 +4517,7 @@ files:
4464
4517
  - lib/katello/tasks/upgrades/3.15/reindex_rpm_modular.rake
4465
4518
  - lib/katello/tasks/upgrades/3.15/set_sub_facet_dmi_uuid.rake
4466
4519
  - lib/katello/tasks/upgrades/3.16/update_applicable_el8_hosts.rake
4520
+ - lib/katello/tasks/upgrades/3.18/add_cvv_export_history_metadata.rb
4467
4521
  - lib/katello/tasks/upgrades/3.8/clear_checksum_type.rake
4468
4522
  - lib/katello/tasks/virt_who_report.rake
4469
4523
  - lib/katello/url_constrained_cookie_store.rb
@@ -4563,7 +4617,6 @@ files:
4563
4617
  - webpack/__mocks__/foremanReact/components/BreadcrumbBar/index.js
4564
4618
  - webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
4565
4619
  - webpack/__mocks__/foremanReact/components/common/EmptyState.js
4566
- - webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js
4567
4620
  - webpack/__mocks__/foremanReact/redux.js
4568
4621
  - webpack/__mocks__/foremanReact/redux/actions/toasts.js
4569
4622
  - webpack/__mocks__/react-intl/index.js
@@ -4765,6 +4818,14 @@ files:
4765
4818
  - webpack/scenes/ContentViews/Details/ContentViewDetails.js
4766
4819
  - webpack/scenes/ContentViews/Details/ContentViewInfo.js
4767
4820
  - webpack/scenes/ContentViews/Details/DetailsContainer.js
4821
+ - webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js
4822
+ - webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js
4823
+ - webpack/scenes/ContentViews/Details/Repositories/LastSync.js
4824
+ - webpack/scenes/ContentViews/Details/Repositories/RepoAddedStatus.js
4825
+ - webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js
4826
+ - webpack/scenes/ContentViews/Details/Repositories/SelectableDropdown.js
4827
+ - webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.fixtures.json
4828
+ - webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js
4768
4829
  - webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js
4769
4830
  - webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json
4770
4831
  - webpack/scenes/ContentViews/Details/contentViewInfo.scss