katello 4.10.0 → 4.11.0.rc1

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 (449) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/locale/bn/katello.js +254 -215
  3. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +254 -215
  4. data/app/assets/javascripts/katello/locale/ca/katello.js +254 -215
  5. data/app/assets/javascripts/katello/locale/cs/katello.js +254 -215
  6. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +254 -215
  7. data/app/assets/javascripts/katello/locale/de/katello.js +260 -245
  8. data/app/assets/javascripts/katello/locale/de_AT/katello.js +254 -215
  9. data/app/assets/javascripts/katello/locale/de_DE/katello.js +254 -215
  10. data/app/assets/javascripts/katello/locale/el/katello.js +254 -215
  11. data/app/assets/javascripts/katello/locale/en/katello.js +254 -215
  12. data/app/assets/javascripts/katello/locale/en_GB/katello.js +254 -215
  13. data/app/assets/javascripts/katello/locale/en_US/katello.js +254 -215
  14. data/app/assets/javascripts/katello/locale/es/katello.js +257 -233
  15. data/app/assets/javascripts/katello/locale/et_EE/katello.js +254 -215
  16. data/app/assets/javascripts/katello/locale/fr/katello.js +268 -268
  17. data/app/assets/javascripts/katello/locale/gl/katello.js +254 -215
  18. data/app/assets/javascripts/katello/locale/gu/katello.js +254 -215
  19. data/app/assets/javascripts/katello/locale/he_IL/katello.js +254 -215
  20. data/app/assets/javascripts/katello/locale/hi/katello.js +254 -215
  21. data/app/assets/javascripts/katello/locale/id/katello.js +254 -215
  22. data/app/assets/javascripts/katello/locale/it/katello.js +254 -221
  23. data/app/assets/javascripts/katello/locale/ja/katello.js +268 -268
  24. data/app/assets/javascripts/katello/locale/ka/katello.js +261 -231
  25. data/app/assets/javascripts/katello/locale/kn/katello.js +254 -215
  26. data/app/assets/javascripts/katello/locale/ko/katello.js +255 -222
  27. data/app/assets/javascripts/katello/locale/locale/katello.js +1049 -1012
  28. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +254 -215
  29. data/app/assets/javascripts/katello/locale/mr/katello.js +254 -215
  30. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +254 -215
  31. data/app/assets/javascripts/katello/locale/or/katello.js +254 -215
  32. data/app/assets/javascripts/katello/locale/pa/katello.js +254 -215
  33. data/app/assets/javascripts/katello/locale/pl/katello.js +254 -215
  34. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +254 -215
  35. data/app/assets/javascripts/katello/locale/pt/katello.js +254 -215
  36. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +257 -233
  37. data/app/assets/javascripts/katello/locale/ro/katello.js +254 -215
  38. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +254 -215
  39. data/app/assets/javascripts/katello/locale/ru/katello.js +255 -222
  40. data/app/assets/javascripts/katello/locale/sl/katello.js +254 -215
  41. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +254 -215
  42. data/app/assets/javascripts/katello/locale/ta/katello.js +254 -215
  43. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +254 -215
  44. data/app/assets/javascripts/katello/locale/te/katello.js +254 -215
  45. data/app/assets/javascripts/katello/locale/tr/katello.js +254 -215
  46. data/app/assets/javascripts/katello/locale/vi/katello.js +254 -215
  47. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +254 -215
  48. data/app/assets/javascripts/katello/locale/zh/katello.js +254 -215
  49. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +268 -268
  50. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +255 -222
  51. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +15 -2
  52. data/app/controllers/katello/api/v2/capsule_content_controller.rb +21 -4
  53. data/app/controllers/katello/api/v2/capsules_controller.rb +11 -1
  54. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +1 -1
  55. data/app/controllers/katello/api/v2/docker_tags_controller.rb +2 -0
  56. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +2 -1
  57. data/app/controllers/katello/api/v2/organizations_controller.rb +2 -2
  58. data/app/controllers/katello/api/v2/repositories_controller.rb +1 -0
  59. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +5 -5
  60. data/app/controllers/katello/api/v2/sync_plans_controller.rb +11 -3
  61. data/app/controllers/katello/concerns/api/api_controller.rb +6 -0
  62. data/app/controllers/katello/concerns/api/v2/hosts_bulk_actions_controller_extensions.rb +23 -0
  63. data/app/controllers/katello/concerns/filtered_auto_complete_search.rb +1 -1
  64. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +2 -0
  65. data/app/controllers/katello/remote_execution_controller.rb +1 -1
  66. data/app/jobs/create_host_lifecycle_expire_soon_notifications.rb +11 -0
  67. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +10 -0
  68. data/app/lib/actions/katello/capsule_content/refresh_repos.rb +8 -2
  69. data/app/lib/actions/katello/capsule_content/sync.rb +30 -10
  70. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +13 -0
  71. data/app/lib/actions/katello/capsule_content/update_content_counts.rb +24 -0
  72. data/app/lib/actions/katello/content_view/promote.rb +9 -0
  73. data/app/lib/actions/katello/content_view/publish.rb +9 -0
  74. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +8 -0
  75. data/app/lib/actions/katello/repository/sync.rb +11 -0
  76. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +5 -0
  77. data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +6 -1
  78. data/app/lib/actions/pulp3/content_view_version/export.rb +8 -0
  79. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +1 -1
  80. data/app/lib/katello/concerns/base_template_scope_extensions.rb +14 -1
  81. data/app/lib/katello/errors.rb +1 -0
  82. data/app/lib/katello/repo_discovery.rb +2 -2
  83. data/app/lib/katello/validators/content_view_environment_coherent_default_validator.rb +22 -0
  84. data/app/lib/katello/validators/content_view_environment_validator.rb +1 -0
  85. data/app/mailers/katello/task_mailer.rb +54 -0
  86. data/app/models/katello/concerns/host_managed_extensions.rb +41 -1
  87. data/app/models/katello/concerns/organization_extensions.rb +1 -1
  88. data/app/models/katello/concerns/smart_proxy_extensions.rb +75 -3
  89. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +6 -0
  90. data/app/models/katello/content_view.rb +21 -0
  91. data/app/models/katello/content_view_environment.rb +6 -1
  92. data/app/models/katello/docker_meta_tag.rb +1 -1
  93. data/app/models/katello/docker_tag.rb +1 -1
  94. data/app/models/katello/erratum.rb +1 -1
  95. data/app/models/katello/host/content_facet.rb +10 -7
  96. data/app/models/katello/product.rb +8 -0
  97. data/app/models/katello/repository.rb +31 -6
  98. data/app/models/katello/rhel_lifecycle_status.rb +214 -0
  99. data/app/models/katello/sync_plan.rb +19 -1
  100. data/app/models/katello/yum_metadata_file.rb +1 -1
  101. data/app/services/katello/applicability/applicable_content_helper.rb +1 -1
  102. data/app/services/katello/event_queue.rb +10 -2
  103. data/app/services/katello/host_status_manager.rb +1 -0
  104. data/app/services/katello/product_content_importer.rb +45 -3
  105. data/app/services/katello/pulp3/ansible_collection.rb +1 -0
  106. data/app/services/katello/pulp3/api/core.rb +1 -1
  107. data/app/services/katello/pulp3/deb.rb +1 -0
  108. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  109. data/app/services/katello/pulp3/docker_manifest_list.rb +9 -4
  110. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  111. data/app/services/katello/pulp3/erratum.rb +1 -0
  112. data/app/services/katello/pulp3/file_unit.rb +1 -0
  113. data/app/services/katello/pulp3/module_stream.rb +1 -0
  114. data/app/services/katello/pulp3/package_group.rb +1 -0
  115. data/app/services/katello/pulp3/pulp_content_unit.rb +39 -0
  116. data/app/services/katello/pulp3/repository_mirror.rb +21 -2
  117. data/app/services/katello/pulp3/rpm.rb +1 -0
  118. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  119. data/app/services/katello/pulp3/srpm.rb +3 -2
  120. data/app/services/katello/registration_manager.rb +6 -3
  121. data/app/services/katello/repository_type.rb +2 -1
  122. data/app/services/katello/ui_notifications/hosts/lifecycle_expire_soon.rb +58 -0
  123. data/app/views/foreman/job_templates/resolve_traces.erb +1 -1
  124. data/app/views/foreman/smart_proxies/_content_tab.html.erb +1 -3
  125. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +39 -1
  126. data/app/views/katello/api/v2/content_facet/show.json.rabl +4 -0
  127. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -1
  128. data/app/views/katello/api/v2/docker_tags/_base.json.rabl +28 -6
  129. data/app/views/katello/hosts/_errata_counts.html.erb +2 -2
  130. data/app/views/katello/task_mailer/cv_promote_failure.html.erb +31 -0
  131. data/app/views/katello/task_mailer/cv_promote_failure.text.erb +13 -0
  132. data/app/views/katello/task_mailer/cv_publish_failure.html.erb +31 -0
  133. data/app/views/katello/task_mailer/cv_publish_failure.text.erb +13 -0
  134. data/app/views/katello/task_mailer/proxy_sync_failure.html.erb +45 -0
  135. data/app/views/katello/task_mailer/proxy_sync_failure.text.erb +25 -0
  136. data/app/views/katello/task_mailer/repo_sync_failure.html.erb +35 -0
  137. data/app/views/katello/task_mailer/repo_sync_failure.text.erb +15 -0
  138. data/app/views/overrides/organizations/_edit_override.html.erb +4 -0
  139. data/config/routes/api/v2.rb +2 -0
  140. data/db/migrate/20230825180856_add_content_counts_to_smart_proxy.rb +7 -0
  141. data/db/migrate/20231020153017_create_indexes_for_nvra_and_epoch.rb +6 -0
  142. data/db/seeds.d/106-mail_notifications.rb +32 -0
  143. data/db/seeds.d/109-katello-notification-blueprints.rb +6 -0
  144. data/engines/bastion/app/assets/javascripts/bastion/components/views/bst-alert.html +1 -1
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.controller.js +4 -0
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-add-host-collections.controller.js +3 -0
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-add-subscriptions.controller.js +3 -0
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +4 -0
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-copy.controller.js +7 -2
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-host-collections.controller.js +3 -0
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js +3 -0
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-subscriptions.controller.js +3 -0
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/new-activation-key.controller.js +6 -2
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +16 -1
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/rhel-lifecycle-notice.html +5 -0
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +7 -2
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-acs.controller.js +7 -2
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +7 -2
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +7 -2
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/new/new-content-credential.controller.js +3 -0
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +5 -1
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-actions.controller.js +5 -1
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-applicable.controller.js +3 -0
  164. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-installed.controller.js +3 -0
  165. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +4 -0
  166. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +3 -0
  167. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-applicable.controller.js +3 -0
  168. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +3 -0
  169. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages.controller.js +3 -0
  170. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +4 -0
  171. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs-actions.html +1 -1
  172. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs-applicable.html +1 -1
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs-installed.html +1 -1
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +3 -3
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-module-streams.html +1 -1
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-installed.html +1 -1
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-traces.html +3 -3
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +5 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +1 -1
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-host-collections.controller.js +4 -1
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-subscriptions.controller.js +3 -0
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-host-collections.controller.js +4 -1
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-repository-sets.controller.js +3 -0
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-subscriptions.controller.js +3 -0
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-add-subscriptions.html +1 -1
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +4 -3
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-host-collections.html +1 -1
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +3 -3
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-provisioning-info.html +2 -2
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions-list.html +1 -1
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions.html +1 -1
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +3 -3
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +7 -0
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-content-views.controller.js +8 -1
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-repositories.controller.js +10 -2
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/docker-tag-environments.controller.js +5 -2
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/docker-tag-repositories.controller.js +6 -2
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.controller.js +6 -3
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +13 -0
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +6 -0
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/new-environment.controller.js +8 -2
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +4 -0
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-content-hosts.controller.js +7 -2
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-repositories.controller.js +7 -2
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum.controller.js +6 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-info.html +2 -2
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.controller.js +5 -0
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/errata.html +1 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-content-views.controller.js +10 -2
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-repositories.controller.js +8 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/files.controller.js +9 -2
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-add-hosts.controller.js +3 -0
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-copy.controller.js +7 -2
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-hosts.controller.js +3 -0
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/host-collections.controller.js +4 -0
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/new/new-host-collection.controller.js +6 -2
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host.factory.js +4 -0
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +166 -43
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +4 -0
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +1 -1
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +7 -0
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +5 -0
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-advanced-sync.controller.js +6 -2
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +11 -0
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +3 -0
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +2 -2
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery-create.controller.js +3 -0
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +3 -0
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/new/product-form.controller.js +6 -2
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +4 -0
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +1 -1
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-add-products.controller.js +5 -1
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-products.controller.js +4 -0
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/new/new-sync-plan.controller.js +3 -0
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/sync-plans.controller.js +4 -0
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/task-details.controller.js +6 -2
  239. data/lib/katello/engine.rb +2 -3
  240. data/lib/katello/permission_creator.rb +2 -2
  241. data/lib/katello/plugin.rb +4 -0
  242. data/lib/katello/repository_types/ostree.rb +1 -0
  243. data/lib/katello/repository_types/python.rb +1 -0
  244. data/lib/katello/scheduled_jobs.rb +1 -1
  245. data/lib/katello/version.rb +1 -1
  246. data/locale/action_names.rb +1 -3
  247. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  248. data/locale/bn/katello.po +236 -197
  249. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  250. data/locale/bn_IN/katello.po +236 -197
  251. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  252. data/locale/ca/katello.po +236 -197
  253. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  254. data/locale/cs/katello.po +236 -206
  255. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  256. data/locale/cs_CZ/katello.po +236 -197
  257. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  258. data/locale/de/katello.po +241 -202
  259. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  260. data/locale/de_AT/katello.po +236 -197
  261. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  262. data/locale/de_DE/katello.po +236 -197
  263. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  264. data/locale/el/katello.po +236 -197
  265. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  266. data/locale/en/katello.po +236 -197
  267. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  268. data/locale/en_GB/katello.po +236 -197
  269. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  270. data/locale/en_US/katello.po +236 -197
  271. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  272. data/locale/es/katello.po +238 -199
  273. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  274. data/locale/et_EE/katello.po +236 -197
  275. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  276. data/locale/fr/katello.po +247 -208
  277. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  278. data/locale/gl/katello.po +236 -197
  279. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  280. data/locale/gu/katello.po +236 -197
  281. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  282. data/locale/he_IL/katello.po +236 -197
  283. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  284. data/locale/hi/katello.po +236 -197
  285. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  286. data/locale/id/katello.po +236 -197
  287. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  288. data/locale/it/katello.po +236 -197
  289. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  290. data/locale/ja/katello.po +247 -208
  291. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  292. data/locale/ka/katello.po +241 -202
  293. data/locale/katello.pot +1427 -1296
  294. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  295. data/locale/kn/katello.po +236 -197
  296. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  297. data/locale/ko/katello.po +236 -197
  298. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  299. data/locale/ml_IN/katello.po +236 -197
  300. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  301. data/locale/mr/katello.po +236 -197
  302. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  303. data/locale/nl_NL/katello.po +236 -197
  304. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  305. data/locale/or/katello.po +236 -197
  306. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  307. data/locale/pa/katello.po +236 -197
  308. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  309. data/locale/pl/katello.po +236 -197
  310. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  311. data/locale/pl_PL/katello.po +236 -197
  312. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  313. data/locale/pt/katello.po +236 -197
  314. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  315. data/locale/pt_BR/katello.po +238 -199
  316. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  317. data/locale/ro/katello.po +236 -197
  318. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  319. data/locale/ro_RO/katello.po +236 -197
  320. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  321. data/locale/ru/katello.po +236 -197
  322. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  323. data/locale/sl/katello.po +236 -197
  324. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  325. data/locale/sv_SE/katello.po +236 -197
  326. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  327. data/locale/ta/katello.po +236 -197
  328. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  329. data/locale/ta_IN/katello.po +236 -197
  330. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  331. data/locale/te/katello.po +236 -197
  332. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  333. data/locale/tr/katello.po +236 -197
  334. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  335. data/locale/vi/katello.po +236 -197
  336. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  337. data/locale/vi_VN/katello.po +236 -197
  338. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  339. data/locale/zh/katello.po +236 -197
  340. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  341. data/locale/zh_CN/katello.po +247 -208
  342. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  343. data/locale/zh_TW/katello.po +236 -197
  344. data/webpack/components/Table/EmptyStateMessage.js +7 -4
  345. data/webpack/components/Table/MainTable.scss +18 -17
  346. data/webpack/components/Table/TableWrapper.js +4 -1
  347. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +45 -4
  348. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +9 -7
  349. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +1 -1
  350. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +1 -1
  351. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +29 -7
  352. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +106 -66
  353. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  354. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +2 -0
  355. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +53 -29
  356. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +7 -6
  357. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +24 -5
  358. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +137 -7
  359. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +11 -10
  360. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +8 -2
  361. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +27 -10
  362. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataActions.js +3 -22
  363. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataConstants.js +0 -1
  364. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +3 -2
  365. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +2 -2
  366. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +48 -12
  367. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +22 -10
  368. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionHooks.js +1 -1
  369. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +2 -2
  370. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +71 -5
  371. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.scss +16 -0
  372. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +4 -1
  373. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +6 -2
  374. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +2 -1
  375. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +25 -0
  376. data/webpack/components/extensions/Hosts/ActionsBar/index.js +36 -0
  377. data/webpack/components/extensions/Hosts/constants.js +2 -0
  378. data/webpack/components/extensions/RegistrationCommands/RegistrationCommandsPageHelpers.js +13 -7
  379. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +9 -1
  380. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +87 -22
  381. data/webpack/components/extensions/RegistrationCommands/index.js +17 -41
  382. data/webpack/global_index.js +11 -2
  383. data/webpack/redux/reducers/RedHatRepositories/enabled.fixtures.js +4 -0
  384. data/webpack/redux/reducers/RedHatRepositories/enabled.js +1 -0
  385. data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.js +10 -1
  386. data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.scss +33 -31
  387. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +3 -1
  388. data/webpack/scenes/Content/ContentConfig.js +3 -0
  389. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +6 -4
  390. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.scss +8 -6
  391. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +1 -0
  392. data/webpack/scenes/ContentViews/Delete/Steps/CVEnvironmentSelectionForm.scss +4 -2
  393. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -4
  394. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +2 -2
  395. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +5 -5
  396. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/compositeCVDetails.fixtures.json +393 -0
  397. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +30 -4
  398. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +3 -1
  399. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +3 -3
  400. data/webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js +2 -1
  401. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +1 -1
  402. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  403. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +1 -1
  404. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +1 -1
  405. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +24 -1
  406. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +1 -0
  407. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +42 -0
  408. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +13 -11
  409. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +2 -1
  410. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +2 -1
  411. data/webpack/scenes/Hosts/ChangeContentSource/index.js +4 -3
  412. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetails.js +1 -2
  413. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetails.test.js.snap +1 -1
  414. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +2 -1
  415. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +6 -0
  416. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +4 -1
  417. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +13 -4
  418. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/EnabledRepositoryContent.test.js +1 -0
  419. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/__snapshots__/EnabledRepository.test.js.snap +1 -0
  420. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/__snapshots__/EnabledRepositoryContent.test.js.snap +3 -2
  421. data/webpack/scenes/SmartProxy/AdditionalCapsuleContent.js +93 -0
  422. data/webpack/scenes/SmartProxy/Content.js +12 -4
  423. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +107 -0
  424. data/webpack/scenes/SmartProxy/ExpandedSmartProxyRepositories.js +139 -0
  425. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +17 -4
  426. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +1 -0
  427. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +150 -0
  428. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.fixtures.json +799 -0
  429. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +29 -17
  430. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +16 -19
  431. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.scss +12 -8
  432. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +21 -18
  433. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationForm.scss +4 -2
  434. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.scss +38 -19
  435. data/webpack/scenes/Subscriptions/Manifest/index.js +0 -2
  436. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +38 -12
  437. data/webpack/scenes/Subscriptions/SubscriptionsPage.scss +38 -36
  438. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +16 -13
  439. data/webpack/utils/helpers.js +0 -1
  440. metadata +99 -33
  441. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +0 -47
  442. data/webpack/components/Table/TableHooks.js +0 -315
  443. data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
  444. data/webpack/components/extensions/RegistrationCommands/__tests__/LifeCycleEnvironment.test.js +0 -11
  445. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/LifeCycleEnvironment.test.js.snap +0 -29
  446. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +0 -57
  447. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +0 -164
  448. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +0 -140
  449. data/webpack/scenes/Subscriptions/Manifest/Manifest.scss +0 -16
@@ -1,38 +1,50 @@
1
1
  import React from 'react';
2
- import { renderWithRedux, patientlyWaitFor } from 'react-testing-lib-wrapper';
2
+ import { renderWithRedux, patientlyWaitFor, within } from 'react-testing-lib-wrapper';
3
3
 
4
4
  import { nockInstance, assertNockRequest } from '../../../test-utils/nockWrapper';
5
5
  import api from '../../../services/api';
6
- import SmartProxyContentTable from '../SmartProxyContentTable';
6
+ import SmartProxyExpandableTable from '../SmartProxyExpandableTable';
7
7
 
8
- const smartProxyContentData = require('./SmartProxyContentResult.fixtures.json');
8
+ const smartProxyContentData = require('./SmartProxyContentTest.fixtures.json');
9
9
 
10
10
  const smartProxyContentPath = api.getApiUrl('/capsules/1/content/sync');
11
11
 
12
12
  const smartProxyContent = { ...smartProxyContentData };
13
13
 
14
- const contentTable = <SmartProxyContentTable smartProxyId={1} />;
14
+ const contentTable = <SmartProxyExpandableTable smartProxyId={1} />;
15
15
 
16
- test('Can display Smart proxy content table', async (done) => {
16
+ test('Can display Smart proxy content table and expand env and cv details', async (done) => {
17
17
  const detailsScope = nockInstance
18
18
  .get(smartProxyContentPath)
19
19
  .query(true)
20
20
  .reply(200, smartProxyContent);
21
21
 
22
- const { getByText, getAllByLabelText } = renderWithRedux(contentTable);
22
+ const {
23
+ getByText, getAllByText, getByLabelText,
24
+ } = renderWithRedux(contentTable);
23
25
  await patientlyWaitFor(() => expect(getByText('Environment')).toBeInTheDocument());
24
- expect(getByText('Content view')).toBeInTheDocument();
25
- expect(getByText('Type')).toBeInTheDocument();
26
- expect(getByText('Last published')).toBeInTheDocument();
27
- expect(getByText('Repositories')).toBeInTheDocument();
28
- expect(getByText('Synced to smart proxy')).toBeInTheDocument();
29
- expect(getAllByLabelText('Details')[0]).toHaveAttribute('aria-expanded', 'false');
30
- getAllByLabelText('Details')[0].click();
31
- expect(getAllByLabelText('Details')[0]).toHaveAttribute('aria-expanded', 'true');
26
+ const tdEnvExpand = getByLabelText('expand-env-1');
27
+ const envExpansion = within(tdEnvExpand).getByLabelText('Details');
28
+ envExpansion.click();
29
+ await patientlyWaitFor(() => expect(getAllByText('Content view')[0]).toBeInTheDocument());
30
+ expect(getAllByText('Last published')[0]).toBeInTheDocument();
31
+ expect(getAllByText('Repository')[0]).toBeInTheDocument();
32
+ expect(getAllByText('Synced')[0]).toBeInTheDocument();
33
+ const tdCvExpand = getByLabelText('expand-cv-1');
34
+ const cvExpansion = within(tdCvExpand).getByLabelText('Details');
35
+ expect(cvExpansion).toHaveAttribute('aria-expanded', 'false');
36
+ cvExpansion.click();
37
+ await patientlyWaitFor(() => expect(cvExpansion).toHaveAttribute('aria-expanded', 'true'));
32
38
  expect(getByText('Library')).toBeInTheDocument();
33
39
  expect(getByText('Default Organization View')).toBeInTheDocument();
34
- expect(getByText('dev')).toBeInTheDocument();
35
-
36
-
40
+ expect(getAllByText('dev')[0]).toBeInTheDocument();
41
+ expect(getAllByText('Repository')[0]).toBeInTheDocument();
42
+ expect(getAllByText('Packages')[0]).toBeInTheDocument();
43
+ expect(getAllByText('Additional content')[0]).toBeInTheDocument();
44
+ expect(getAllByText('repo1')[0]).toBeInTheDocument();
45
+ expect(getAllByText('22 Packages')[0]).toBeInTheDocument();
46
+ expect(getAllByText(/7 errata/i)[0]).toBeInTheDocument();
47
+ expect(getAllByText(/14 Module streams/i)[0]).toBeInTheDocument();
48
+ expect(getAllByText(/2 Package groups/i)[0]).toBeInTheDocument();
37
49
  assertNockRequest(detailsScope, done);
38
50
  });
@@ -58,25 +58,22 @@ class SubscriptionDetails extends Component {
58
58
  }
59
59
 
60
60
  return (
61
- <div>
62
- {!subscriptionDetails.loading &&
63
- <BreadcrumbsBar
64
- onSwitcherItemClick={(e, url) => this.handleBreadcrumbSwitcherItem(e, url)}
65
- data={{
66
- isSwitchable: true,
67
- breadcrumbItems: [
68
- {
69
- caption: __('Subscriptions'),
70
- onClick: () =>
71
- this.props.history.push('/subscriptions'),
72
- },
73
- {
74
- caption: String(subscriptionDetails.name || __('Subscription Details')),
75
- },
76
- ],
77
- resource,
78
- }}
79
- />}
61
+ <div id="subscription-details">
62
+ {!subscriptionDetails.loading && <BreadcrumbsBar
63
+ isLoadingResources={subscriptionDetails.loading}
64
+ onSwitcherItemClick={(e, url) => this.handleBreadcrumbSwitcherItem(e, url)}
65
+ isSwitchable
66
+ breadcrumbItems={[
67
+ {
68
+ caption: __('Subscriptions'),
69
+ url: '/subscriptions/',
70
+ },
71
+ {
72
+ caption: String(subscriptionDetails.name || __('Subscription Details')),
73
+ },
74
+ ]}
75
+ resource={resource}
76
+ />}
80
77
 
81
78
  <TabContainer id="subscription-tabs-container" defaultActiveKey={1}>
82
79
  <div>
@@ -1,9 +1,13 @@
1
- .scrolld-list {
2
- max-height: 400px;
3
- overflow-y: auto;
4
- }
1
+ #subscription-details {
2
+ margin: 24px;
5
3
 
6
- .list-view-pf-expand {
7
- max-height: 20px;
8
- padding: 0;
9
- }
4
+ .scrolld-list {
5
+ max-height: 400px;
6
+ overflow-y: auto;
7
+ }
8
+
9
+ .list-view-pf-expand {
10
+ max-height: 20px;
11
+ padding: 0;
12
+ }
13
+ }
@@ -1,28 +1,31 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`subscriptions details page should render and contain appropiate components 1`] = `
4
- <div>
4
+ <div
5
+ id="subscription-details"
6
+ >
5
7
  <BreadcrumbsBar
6
- data={
7
- Object {
8
- "breadcrumbItems": Array [
9
- Object {
10
- "caption": "Subscriptions",
11
- "onClick": [Function],
12
- },
13
- Object {
14
- "caption": "OpenShift Employee Subscription",
15
- },
16
- ],
17
- "isSwitchable": true,
18
- "resource": Object {
19
- "nameField": "name",
20
- "resourceUrl": "/katello/api/v2/organizations/1/subscriptions",
21
- "switcherItemUrl": "/subscriptions/:id",
8
+ breadcrumbItems={
9
+ Array [
10
+ Object {
11
+ "caption": "Subscriptions",
12
+ "url": "/subscriptions/",
22
13
  },
23
- }
14
+ Object {
15
+ "caption": "OpenShift Employee Subscription",
16
+ },
17
+ ]
24
18
  }
19
+ isLoadingResources={false}
20
+ isSwitchable={true}
25
21
  onSwitcherItemClick={[Function]}
22
+ resource={
23
+ Object {
24
+ "nameField": "name",
25
+ "resourceUrl": "/katello/api/v2/organizations/1/subscriptions",
26
+ "switcherItemUrl": "/subscriptions/:id",
27
+ }
28
+ }
26
29
  />
27
30
  <ForwardRef
28
31
  defaultActiveKey={1}
@@ -1,3 +1,5 @@
1
- .pf-c-form__group.pf-m-action {
2
- margin-top: 0px;
1
+ #cdn-configuration {
2
+ .pf-c-form__group.pf-m-action {
3
+ margin-top: 0px;
4
+ }
3
5
  }
@@ -1,27 +1,46 @@
1
- .form-horizontal {
2
- padding-left: 40px;
3
- padding-right: 20px;
4
- }
1
+ #manifest-history-tabs {
2
+ .form-horizontal {
3
+ padding-left: 40px;
4
+ padding-right: 20px;
5
+ }
5
6
 
6
- form .row {
7
- margin-left: -15px;
8
- }
7
+ form .row {
8
+ margin-left: -15px;
9
+ }
9
10
 
10
- span.pficon.pficon-info {
11
- margin: 0 5px 0 5px;
12
- }
11
+ span.pficon.pficon-info {
12
+ margin: 0 5px 0 5px;
13
+ }
13
14
 
14
- #simple-content-access {
15
- padding-bottom: 40px;
15
+ #simple-content-access {
16
+ padding-bottom: 40px;
16
17
 
17
- .sca-label {
18
- float: left;
19
- text-align: left;
18
+ .sca-label {
19
+ float: left;
20
+ text-align: left;
21
+ }
20
22
  }
21
- }
22
23
 
23
- .manifest-actions {
24
- .spinner {
25
- margin: 5px 15px 12px 5px;
24
+ .manifest-actions {
25
+ .spinner {
26
+ margin: 5px 15px 12px 5px;
27
+ }
28
+ }
29
+ .manifest-actions > * {
30
+ margin: 10px 5px 0 0 ;
31
+ }
32
+
33
+ #manifest-actions-row {
34
+ display: flex;
35
+ flex-direction: row;
36
+ & > * {
37
+ margin-right: 8px;
38
+ }
39
+ }
40
+
41
+ .modal-body {
42
+ overflow-y: auto;
43
+ overflow-x: hidden;
26
44
  }
45
+
27
46
  }
@@ -17,8 +17,6 @@ import { selectContentCredentials } from '../../ContentCredentials/ContentCreden
17
17
 
18
18
  import ManifestModal from './ManageManifestModal';
19
19
 
20
- import './Manifest.scss';
21
-
22
20
  // map state to props
23
21
  const mapStateToProps = state => ({
24
22
  organization: state.katello.organization,
@@ -6,6 +6,8 @@ import { translate as __ } from 'foremanReact/common/I18n';
6
6
  import { propsToCamelCase } from 'foremanReact/common/helpers';
7
7
  import { isEmpty } from 'lodash';
8
8
  import { Grid, Row, Col, Alert } from 'patternfly-react';
9
+ import { Popover, Flex, FlexItem } from '@patternfly/react-core';
10
+ import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
9
11
  import ModalProgressBar from 'foremanReact/components/common/ModalProgressBar';
10
12
  import PermissionDenied from 'foremanReact/components/PermissionDenied';
11
13
  import ManageManifestModal from './Manifest/';
@@ -204,7 +206,7 @@ class SubscriptionsPage extends Component {
204
206
  const emptyStateData = isManifestImported
205
207
  ? {
206
208
  header: __('There are no Subscriptions to display'),
207
- description: __('Add Subscriptions using the Add Subscriptions button.'),
209
+ description: __('Add subscriptions using the Add Subscriptions button.'),
208
210
  action: {
209
211
  title: __('Add subscriptions'),
210
212
  url: 'subscriptions/add',
@@ -212,7 +214,7 @@ class SubscriptionsPage extends Component {
212
214
  }
213
215
  : {
214
216
  header: __('There are no Subscriptions to display'),
215
- description: __('Import a Manifest to manage your Entitlements.'),
217
+ description: __('Import a subscription manifest to give hosts access to Red Hat content.'),
216
218
  action: {
217
219
  onClick: () => openManageManifestModal(),
218
220
  title: __('Import a Manifest'),
@@ -220,26 +222,50 @@ class SubscriptionsPage extends Component {
220
222
  };
221
223
 
222
224
  const SCAAlert = (
223
- <Alert ouiaId="sca-alert" type={simpleContentAccess ? 'info' : 'warning'}>
225
+ <Alert ouiaId="sca-alert" type="warning">
224
226
  <FormattedMessage
225
227
  id="sca-alert"
226
228
  values={{
227
- subscriptionsService: <a href={SUBSCRIPTIONS_SERVICE_DOC_URL} target="_blank" rel="noreferrer">{__('Subscriptions service')}</a>,
228
- br: <br />,
229
229
  scaLink: <a href={SCA_URL} target="_blank" rel="noreferrer">{__('Simple Content Access')}</a>,
230
230
  }}
231
- defaultMessage={simpleContentAccess ? __(`This organization has Simple Content Access enabled.
232
- Hosts are not required to have subscriptions attached to access repositories.
233
- {br}
234
- Learn more about your overall subscription usage with the {subscriptionsService}.`) : __('This organization is not using {scaLink}. Entitlement-based subscription management is deprecated and will be removed in a future version.')}
231
+ defaultMessage={__('This organization is not using {scaLink}. Entitlement-based subscription management is deprecated and will be removed in Katello 4.12.')}
235
232
  />
236
233
  </Alert>
237
234
  );
235
+
236
+ const SCAPopoverContent = (
237
+ <FormattedMessage
238
+ id="sca-popover-content"
239
+ values={{
240
+ br: <br />,
241
+ subscriptionsService: <a href={SUBSCRIPTIONS_SERVICE_DOC_URL} target="_blank" rel="noreferrer">{__('Subscriptions service')}</a>,
242
+ }}
243
+ defaultMessage={__(`This page shows the subscriptions available from this organization's subscription manifest.
244
+ {br}
245
+ Learn more about your overall subscription usage with the {subscriptionsService}.`)}
246
+ />
247
+ );
238
248
  return (
239
- <Grid bsClass="container-fluid">
249
+ <Grid bsClass="container-fluid" id="subscriptions-page">
240
250
  <Row>
241
251
  <Col sm={12}>
242
- <h1>{__('Subscriptions')}</h1>
252
+ <Flex alignItems={{ default: 'alignItemsBaseline' }}>
253
+ <FlexItem>
254
+ <h1>{__('Subscriptions')}</h1>
255
+ </FlexItem>
256
+ {isManifestImported && (
257
+ <FlexItem>
258
+ <Popover
259
+ aria-label="sca-popover"
260
+ bodyContent={SCAPopoverContent}
261
+ >
262
+ <span style={{ cursor: 'pointer', position: 'relative', top: '-0.2em' }}>
263
+ <OutlinedQuestionCircleIcon>Toggle popover</OutlinedQuestionCircleIcon>
264
+ </span>
265
+ </Popover>
266
+ </FlexItem>
267
+ )}
268
+ </Flex>
243
269
 
244
270
  <SubscriptionsToolbar
245
271
  canManageSubscriptionAllocations={canManageSubscriptionAllocations}
@@ -274,7 +300,7 @@ class SubscriptionsPage extends Component {
274
300
  />
275
301
 
276
302
  <div id="subscriptions-table" className="modal-container">
277
- {!this.props.organization?.loading && SCAAlert}
303
+ {!this.props.organization?.loading && !simpleContentAccess ? SCAAlert : null}
278
304
  <SubscriptionsTable
279
305
  canManageSubscriptionAllocations={canManageSubscriptionAllocations}
280
306
  loadSubscriptions={this.props.loadSubscriptions}
@@ -1,50 +1,52 @@
1
- @import "~@theforeman/vendor/scss/variables";
1
+ @import '~@theforeman/vendor/scss/variables';
2
2
 
3
- .editable {
4
- &.changed {
5
- font-weight: bold;
3
+ #subscriptions-page {
4
+ .editable {
5
+ &.changed {
6
+ font-weight: bold;
7
+ }
6
8
  }
7
- }
8
9
 
9
- .pf-table-inline-edit {
10
- tbody {
11
- .form-group {
12
- margin-bottom: 0;
13
- }
10
+ .pf-table-inline-edit {
11
+ tbody {
12
+ .form-group {
13
+ margin-bottom: 0;
14
+ }
14
15
 
15
- tr.open-grouped-row {
16
- background-color: $table-bg-hover;
17
- td {
18
- border-bottom-color: $table-border-hover;
16
+ tr.open-grouped-row {
17
+ background-color: $table-bg-hover;
18
+ td {
19
+ border-bottom-color: $table-border-hover;
20
+ }
19
21
  }
20
22
  }
21
- }
22
23
 
23
- .table-view-pf-select {
24
- width: 50px;
24
+ .table-view-pf-select {
25
+ width: 50px;
25
26
 
26
- .collapse-subscription-group-button {
27
- margin-top: 4px;
28
- cursor: pointer;
29
- float: left;
30
- font-weight: bold;
31
- }
27
+ .collapse-subscription-group-button {
28
+ margin-top: 4px;
29
+ cursor: pointer;
30
+ float: left;
31
+ font-weight: bold;
32
+ }
32
33
 
33
- input[type="checkbox"] {
34
- float: right;
34
+ input[type='checkbox'] {
35
+ float: right;
36
+ }
35
37
  }
36
38
  }
37
- }
38
39
 
39
- .option-tooltip-container {
40
- display: inline-block;
41
- margin-left: 10px;
42
- margin-top: 3px;
43
- width: 10px;
44
- }
40
+ .option-tooltip-container {
41
+ display: inline-block;
42
+ margin-left: 10px;
43
+ margin-top: 3px;
44
+ width: 10px;
45
+ }
45
46
 
46
- span.fa.fa-minus::before {
47
- content: "\2014";
48
- color: gray;
49
- font-size: 1em;
47
+ span.fa.fa-minus::before {
48
+ content: '\2014';
49
+ color: gray;
50
+ font-size: 1em;
51
+ }
50
52
  }
@@ -15,6 +15,7 @@ exports[`subscriptions page should render 1`] = `
15
15
  bsClass="container-fluid"
16
16
  componentClass="div"
17
17
  fluid={false}
18
+ id="subscriptions-page"
18
19
  >
19
20
  <Row
20
21
  bsClass="row"
@@ -25,9 +26,19 @@ exports[`subscriptions page should render 1`] = `
25
26
  componentClass="div"
26
27
  sm={12}
27
28
  >
28
- <h1>
29
- Subscriptions
30
- </h1>
29
+ <Flex
30
+ alignItems={
31
+ Object {
32
+ "default": "alignItemsBaseline",
33
+ }
34
+ }
35
+ >
36
+ <FlexItem>
37
+ <h1>
38
+ Subscriptions
39
+ </h1>
40
+ </FlexItem>
41
+ </Flex>
31
42
  <SubscriptionsToolbar
32
43
  autocompleteQueryParams={
33
44
  Object {
@@ -71,11 +82,10 @@ exports[`subscriptions page should render 1`] = `
71
82
  type="warning"
72
83
  >
73
84
  <FormattedMessage
74
- defaultMessage="This organization is not using {scaLink}. Entitlement-based subscription management is deprecated and will be removed in a future version."
85
+ defaultMessage="This organization is not using {scaLink}. Entitlement-based subscription management is deprecated and will be removed in Katello 4.12."
75
86
  id="sca-alert"
76
87
  values={
77
88
  Object {
78
- "br": <br />,
79
89
  "scaLink": <a
80
90
  href="https://access.redhat.com/articles/simple-content-access"
81
91
  rel="noreferrer"
@@ -83,13 +93,6 @@ exports[`subscriptions page should render 1`] = `
83
93
  >
84
94
  Simple Content Access
85
95
  </a>,
86
- "subscriptionsService": <a
87
- href="https://access.redhat.com/documentation/en-us/subscription_central/2021/html-single/getting_started_with_the_subscriptions_service/index"
88
- rel="noreferrer"
89
- target="_blank"
90
- >
91
- Subscriptions service
92
- </a>,
93
96
  }
94
97
  }
95
98
  />
@@ -102,7 +105,7 @@ exports[`subscriptions page should render 1`] = `
102
105
  "onClick": [Function],
103
106
  "title": "Import a Manifest",
104
107
  },
105
- "description": "Import a Manifest to manage your Entitlements.",
108
+ "description": "Import a subscription manifest to give hosts access to Red Hat content.",
106
109
  "header": "There are no Subscriptions to display",
107
110
  }
108
111
  }
@@ -124,4 +124,3 @@ export default {
124
124
  apiError,
125
125
  };
126
126
 
127
- export const friendlySearchParam = searchParam => decodeURIComponent(searchParam.replace(/\+/g, ' '));