katello 4.11.0 → 4.12.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 (329) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/katello.global.js +1 -1
  3. data/app/assets/javascripts/katello/locale/bn/katello.js +93 -99
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +93 -99
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +97 -100
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +96 -99
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +109 -100
  8. data/app/assets/javascripts/katello/locale/de/katello.js +120 -102
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +93 -99
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +93 -99
  11. data/app/assets/javascripts/katello/locale/el/katello.js +103 -100
  12. data/app/assets/javascripts/katello/locale/en/katello.js +93 -99
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +105 -99
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +93 -99
  15. data/app/assets/javascripts/katello/locale/es/katello.js +117 -102
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +93 -99
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +120 -102
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +97 -100
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +93 -99
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +93 -99
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +93 -99
  22. data/app/assets/javascripts/katello/locale/id/katello.js +93 -99
  23. data/app/assets/javascripts/katello/locale/it/katello.js +106 -100
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +120 -102
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +113 -101
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +93 -99
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +114 -102
  28. data/app/assets/javascripts/katello/locale/locale/katello.js +1183 -1048
  29. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +93 -99
  30. data/app/assets/javascripts/katello/locale/mr/katello.js +93 -99
  31. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +93 -99
  32. data/app/assets/javascripts/katello/locale/or/katello.js +93 -99
  33. data/app/assets/javascripts/katello/locale/pa/katello.js +93 -99
  34. data/app/assets/javascripts/katello/locale/pl/katello.js +93 -99
  35. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +93 -99
  36. data/app/assets/javascripts/katello/locale/pt/katello.js +93 -99
  37. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +117 -102
  38. data/app/assets/javascripts/katello/locale/ro/katello.js +93 -99
  39. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +93 -99
  40. data/app/assets/javascripts/katello/locale/ru/katello.js +114 -102
  41. data/app/assets/javascripts/katello/locale/sl/katello.js +93 -99
  42. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +97 -100
  43. data/app/assets/javascripts/katello/locale/ta/katello.js +93 -99
  44. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +93 -99
  45. data/app/assets/javascripts/katello/locale/te/katello.js +93 -99
  46. data/app/assets/javascripts/katello/locale/tr/katello.js +93 -99
  47. data/app/assets/javascripts/katello/locale/vi/katello.js +93 -99
  48. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +93 -99
  49. data/app/assets/javascripts/katello/locale/zh/katello.js +93 -99
  50. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +120 -102
  51. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +114 -102
  52. data/app/assets/javascripts/katello/sync_management/index.js +0 -1
  53. data/app/assets/javascripts/katello/sync_management/sync_management.js +365 -308
  54. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -0
  55. data/app/controllers/katello/api/v2/debs_controller.rb +4 -0
  56. data/app/controllers/katello/api/v2/host_debs_controller.rb +13 -1
  57. data/app/controllers/katello/api/v2/organizations_controller.rb +1 -3
  58. data/app/controllers/katello/api/v2/repositories_controller.rb +2 -8
  59. data/app/controllers/katello/concerns/api/v2/registration_commands_controller_extensions.rb +0 -1
  60. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +1 -0
  61. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +7 -3
  62. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +1 -17
  63. data/app/helpers/katello/concerns/dashboard_helper_extensions.rb +0 -20
  64. data/app/lib/actions/katello/content_view/incremental_updates.rb +28 -15
  65. data/app/lib/actions/katello/content_view/publish.rb +3 -3
  66. data/app/lib/actions/katello/content_view_version/auto_create_products.rb +4 -4
  67. data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +5 -5
  68. data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +5 -5
  69. data/app/lib/actions/katello/content_view_version/import.rb +14 -13
  70. data/app/lib/actions/katello/content_view_version/import_library.rb +4 -4
  71. data/app/lib/actions/katello/content_view_version/import_repository.rb +3 -3
  72. data/app/lib/actions/katello/content_view_version/reset_content_view_repositories_from_metadata.rb +2 -2
  73. data/app/lib/actions/katello/host/hypervisors_update.rb +0 -1
  74. data/app/lib/actions/katello/organization/manifest_delete.rb +1 -1
  75. data/app/lib/actions/katello/organization/manifest_refresh.rb +16 -16
  76. data/app/lib/actions/katello/repository/sync.rb +2 -4
  77. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +20 -15
  78. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +17 -14
  79. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +11 -11
  80. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +18 -13
  81. data/app/lib/actions/pulp3/repository/import_upload.rb +13 -5
  82. data/app/lib/actions/pulp3/repository/save_artifact.rb +23 -12
  83. data/app/lib/actions/pulp3/repository/save_version.rb +13 -1
  84. data/app/lib/katello/api/v2/error_handling.rb +1 -1
  85. data/app/lib/katello/lazy_accessor.rb +6 -6
  86. data/app/lib/katello/resources/candlepin/owner.rb +2 -2
  87. data/app/mailers/katello/errata_mailer.rb +3 -3
  88. data/app/models/katello/concerns/host_managed_extensions.rb +38 -83
  89. data/app/models/katello/concerns/hostgroup_extensions.rb +4 -2
  90. data/app/models/katello/concerns/organization_extensions.rb +1 -1
  91. data/app/models/katello/concerns/pulp_database_unit.rb +1 -1
  92. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -5
  93. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -27
  94. data/app/models/katello/content_view.rb +11 -6
  95. data/app/models/katello/content_view_module_stream_filter.rb +1 -1
  96. data/app/models/katello/content_view_version.rb +2 -0
  97. data/app/models/katello/deb.rb +8 -0
  98. data/app/models/katello/glue/candlepin/pool.rb +2 -7
  99. data/app/models/katello/host/content_facet.rb +19 -14
  100. data/app/models/katello/host/subscription_facet.rb +0 -19
  101. data/app/models/katello/host_tracer.rb +9 -5
  102. data/app/models/katello/installed_deb.rb +1 -0
  103. data/app/models/katello/repository.rb +3 -2
  104. data/app/models/katello/trace_status.rb +6 -2
  105. data/app/overrides/add_organization_attributes.rb +0 -18
  106. data/app/presenters/katello/host_deb_presenter.rb +23 -0
  107. data/app/services/katello/candlepin/consumer.rb +0 -4
  108. data/app/services/katello/candlepin/event_handler.rb +6 -25
  109. data/app/services/katello/candlepin/message_handler.rb +1 -21
  110. data/app/services/katello/host/profiles_uploader.rb +17 -6
  111. data/app/services/katello/host_status_manager.rb +0 -22
  112. data/app/services/katello/organization_creator.rb +2 -2
  113. data/app/services/katello/pulp3/api/apt.rb +1 -1
  114. data/app/services/katello/pulp3/content_view_version/export.rb +2 -2
  115. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +1 -0
  116. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +3 -0
  117. data/app/services/katello/pulp3/repository/apt.rb +16 -6
  118. data/app/services/katello/registration_manager.rb +1 -13
  119. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +4 -4
  120. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +24 -0
  121. data/app/views/foreman/job_templates/install_packages_by_search_query_-_katello_ansible_default.erb +28 -0
  122. data/app/views/foreman/job_templates/remove_packages_by_search_query_-_katello_ansible_default.erb +26 -0
  123. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +33 -0
  124. data/app/views/katello/api/v2/host_debs/base.json.rabl +2 -0
  125. data/app/views/katello/api/v2/hosts/base.json.rabl +9 -0
  126. data/app/views/katello/api/v2/subscription_facet/base_with_root.json.rabl +0 -3
  127. data/app/views/katello/api/v2/subscription_facet/show.json.rabl +3 -0
  128. data/app/views/katello/sync_management/index.html.erb +14 -13
  129. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +20 -16
  130. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +6 -4
  131. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +4 -2
  132. data/app/views/overrides/organizations/_edit_override.html.erb +0 -11
  133. data/db/migrate/20131014225132_add_users_fields.rb +0 -1
  134. data/db/migrate/20150603045418_remove_user_fields.rb +0 -2
  135. data/db/migrate/20160404132250_remove_katello_from_notification_name.rb +4 -22
  136. data/db/migrate/20160505181337_rename_katello_settings.rb +2 -2
  137. data/db/migrate/20200818192230_update_system_purpose_status.rb +9 -3
  138. data/db/migrate/20240111032511_add_index_to_host_installed_packages.rb +16 -0
  139. data/db/migrate/20240122150431_remove_content_counts_index.rb +5 -0
  140. data/db/migrate/20240123120109_remove_pulp_export_destination_setting.rb +9 -0
  141. data/db/migrate/20240207191223_remove_entitlement_mode_host_statuses.rb +30 -0
  142. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  143. data/engines/bastion/app/assets/javascripts/bastion/bastion.js +0 -2
  144. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +6 -2
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +0 -4
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +0 -1
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +1 -4
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +45 -29
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js +0 -10
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +0 -1
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -21
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions.html +0 -5
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +0 -7
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +15 -11
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +332 -71
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +332 -64
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +508 -232
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +361 -90
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +311 -57
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +336 -68
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +332 -64
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +343 -73
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +8 -8
  164. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +9 -1
  165. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -6
  166. data/lib/katello/engine.rb +0 -3
  167. data/lib/katello/plugin.rb +2 -11
  168. data/lib/katello/tasks/rubocop.rake +0 -9
  169. data/lib/katello/tasks/unify_hosts.rake +0 -1
  170. data/lib/katello/tasks/upgrades/4.12/update_content_access_modes.rake +35 -0
  171. data/lib/katello/version.rb +1 -1
  172. data/locale/action_names.rb +12 -6
  173. data/locale/bn/katello.po +35 -41
  174. data/locale/bn/katello.pox +0 -0
  175. data/locale/bn_IN/katello.po +35 -41
  176. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  177. data/locale/ca/katello.po +36 -42
  178. data/locale/cs/katello.po +35 -42
  179. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  180. data/locale/cs_CZ/katello.po +36 -42
  181. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  182. data/locale/de/katello.po +37 -43
  183. data/locale/de_AT/katello.po +35 -41
  184. data/locale/de_DE/katello.po +35 -41
  185. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/el/katello.po +36 -42
  187. data/locale/en/katello.po +35 -41
  188. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  189. data/locale/en_GB/katello.po +35 -41
  190. data/locale/en_US/katello.po +35 -41
  191. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  192. data/locale/es/katello.po +37 -43
  193. data/locale/et_EE/katello.po +35 -41
  194. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  195. data/locale/fr/katello.po +37 -43
  196. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  197. data/locale/gl/katello.po +36 -42
  198. data/locale/gu/katello.po +35 -41
  199. data/locale/he_IL/katello.po +35 -41
  200. data/locale/hi/katello.po +35 -41
  201. data/locale/id/katello.po +35 -41
  202. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  203. data/locale/it/katello.po +36 -42
  204. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  205. data/locale/ja/katello.po +37 -43
  206. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  207. data/locale/ka/katello.po +36 -42
  208. data/locale/katello.pot +707 -674
  209. data/locale/kn/katello.po +35 -41
  210. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  211. data/locale/ko/katello.po +37 -43
  212. data/locale/messages.mo +0 -0
  213. data/locale/ml_IN/katello.po +35 -41
  214. data/locale/mr/katello.po +35 -41
  215. data/locale/nl_NL/katello.po +35 -41
  216. data/locale/or/katello.po +35 -41
  217. data/locale/pa/katello.po +35 -41
  218. data/locale/pl/katello.po +35 -41
  219. data/locale/pl_PL/katello.po +35 -41
  220. data/locale/pt/katello.po +35 -41
  221. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  222. data/locale/pt_BR/katello.po +37 -43
  223. data/locale/ro/katello.po +35 -41
  224. data/locale/ro_RO/katello.po +35 -41
  225. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  226. data/locale/ru/katello.po +37 -43
  227. data/locale/sl/katello.po +35 -41
  228. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  229. data/locale/sv_SE/katello.po +36 -42
  230. data/locale/ta/katello.po +35 -41
  231. data/locale/ta_IN/katello.po +35 -41
  232. data/locale/te/katello.po +35 -41
  233. data/locale/tr/katello.po +35 -41
  234. data/locale/vi/katello.po +35 -41
  235. data/locale/vi_VN/katello.po +35 -41
  236. data/locale/zh/katello.po +35 -41
  237. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  238. data/locale/zh_CN/katello.po +37 -43
  239. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  240. data/locale/zh_TW/katello.po +37 -43
  241. data/package.json +0 -1
  242. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +4 -0
  243. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +4 -1
  244. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +250 -0
  245. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.scss +3 -0
  246. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +585 -0
  247. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.scss +12 -0
  248. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsActions.js +13 -0
  249. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsConstants.js +13 -0
  250. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsSelectors.js +16 -0
  251. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsActions.js +17 -0
  252. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsConstants.js +3 -0
  253. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsSelectors.js +16 -0
  254. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +1 -8
  255. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +2 -0
  256. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +6 -5
  257. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +5 -19
  258. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +13 -5
  259. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debs.fixtures.json +31 -0
  260. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsInstallModal.test.js +226 -0
  261. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsTab.test.js +420 -0
  262. data/webpack/components/extensions/HostDetails/Tabs/__tests__/installableDebs.fixtures.json +63 -0
  263. data/webpack/components/extensions/HostDetails/Tabs/__tests__/traces.fixtures.json +11 -1
  264. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +63 -3
  265. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +3 -1
  266. data/webpack/components/extensions/RegistrationCommands/index.js +9 -0
  267. data/webpack/redux/actions/RedHatRepositories/helpers.js +3 -3
  268. data/webpack/scenes/ContentViews/ContentViewsConstants.js +3 -0
  269. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +0 -13
  270. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +23 -1
  271. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +19 -1
  272. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  273. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +0 -13
  274. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +37 -3
  275. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +10 -2
  276. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +0 -13
  277. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -5
  278. data/webpack/scenes/Organizations/OrganizationSelectors.js +0 -3
  279. data/webpack/scenes/Subscriptions/Manifest/index.js +1 -4
  280. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +3 -25
  281. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +0 -3
  282. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +0 -3
  283. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +0 -22
  284. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsSelectors.test.js.snap +0 -3
  285. data/webpack/scenes/Subscriptions/index.js +1 -2
  286. metadata +51 -191
  287. data/app/controllers/katello/concerns/content_facet_hosts_controller_extensions.rb +0 -22
  288. data/app/models/katello/concerns/widget_extensions.rb +0 -23
  289. data/app/models/katello/purpose_addons_status.rb +0 -28
  290. data/app/models/katello/purpose_role_status.rb +0 -28
  291. data/app/models/katello/purpose_sla_status.rb +0 -28
  292. data/app/models/katello/purpose_status.rb +0 -71
  293. data/app/models/katello/purpose_usage_status.rb +0 -28
  294. data/app/models/katello/subscription_status.rb +0 -71
  295. data/app/services/katello/candlepin/system_purpose.rb +0 -49
  296. data/app/views/dashboard/_subscription_status_widget.html.erb +0 -37
  297. data/app/views/dashboard/_subscription_widget.html.erb +0 -85
  298. data/app/views/overrides/organizations/_index_header_override.html.erb +0 -3
  299. data/app/views/overrides/organizations/_index_row_override.html.erb +0 -3
  300. data/app/views/overrides/organizations/_step_1_override.html.erb +0 -10
  301. data/config/locales/README +0 -10
  302. data/config/locales/bn.yml +0 -182
  303. data/config/locales/compare_upstream.sh +0 -21
  304. data/config/locales/cs.yml +0 -211
  305. data/config/locales/de.yml +0 -203
  306. data/config/locales/en.yml +0 -205
  307. data/config/locales/es.yml +0 -199
  308. data/config/locales/fr.yml +0 -222
  309. data/config/locales/gu.yml +0 -181
  310. data/config/locales/hi.yml +0 -199
  311. data/config/locales/it.yml +0 -205
  312. data/config/locales/ja.yml +0 -197
  313. data/config/locales/kn.yml +0 -199
  314. data/config/locales/ko.yml +0 -197
  315. data/config/locales/mr.yml +0 -178
  316. data/config/locales/or.yml +0 -181
  317. data/config/locales/pa.yml +0 -181
  318. data/config/locales/pt-BR.yml +0 -207
  319. data/config/locales/pt.yml +0 -207
  320. data/config/locales/ru.yml +0 -257
  321. data/config/locales/ta.yml +0 -181
  322. data/config/locales/te.yml +0 -181
  323. data/config/locales/update.sh +0 -14
  324. data/config/locales/zh-CN.yml +0 -199
  325. data/config/locales/zh-TW.yml +0 -199
  326. data/engines/bastion/app/assets/javascripts/bastion/bastion-bootstrap.js +0 -17
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/content-access-mode-banner.directive.js +0 -22
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +0 -10
  329. data/webpack/scenes/Subscriptions/Manifest/SimpleContentAccess.js +0 -96
@@ -50,6 +50,8 @@ import { runSubmanRepos } from '../../Cards/ContentViewDetailsCard/HostContentVi
50
50
  const invokeRexJobs = ['create_job_invocations'];
51
51
  const createBookmarks = ['create_bookmarks'];
52
52
 
53
+ export const hidePackagesTab = ({ hostDetails }) => !(hostDetails?.operatingsystem_family?.match(/RedHat|SUSE/i));
54
+
53
55
  const UpdateVersionsSelect = ({
54
56
  packageName,
55
57
  rowIndex,
@@ -15,7 +15,7 @@ const baseParams = ({
15
15
  job_invocation: {
16
16
  feature,
17
17
  inputs,
18
- descriptionFormat,
18
+ description_format: descriptionFormat,
19
19
  search_query: `name ^ (${hostname})`,
20
20
  },
21
21
  });
@@ -41,7 +41,7 @@ const katelloPackageInstallBySearchParams = ({ hostname, search, descriptionForm
41
41
  hostname,
42
42
  inputs: { [PACKAGE_SEARCH_QUERY]: search },
43
43
  feature: REX_FEATURES.KATELLO_PACKAGE_INSTALL_BY_SEARCH,
44
- description_format: descriptionFormat,
44
+ descriptionFormat,
45
45
  });
46
46
 
47
47
  const katelloPackageRemoveParams = ({ hostname, packageName }) =>
@@ -56,19 +56,20 @@ const katelloPackagesRemoveParams = ({ hostname, search, descriptionFormat }) =>
56
56
  hostname,
57
57
  inputs: { [PACKAGES_SEARCH_QUERY]: search },
58
58
  feature: REX_FEATURES.KATELLO_PACKAGES_REMOVE_BY_SEARCH,
59
- description_format: descriptionFormat,
59
+ descriptionFormat,
60
60
  });
61
61
 
62
- const katelloPackageUpdateParams = ({ hostname, packageName }) =>
62
+ const katelloPackageUpdateParams = ({ hostname, packageName, descriptionFormat }) =>
63
63
  baseParams({
64
64
  hostname,
65
65
  inputs: { package: packageName },
66
66
  feature: REX_FEATURES.KATELLO_PACKAGE_UPDATE,
67
+ descriptionFormat,
67
68
  });
68
69
 
69
70
  const katelloPackagesUpdateParams = ({
70
71
  hostname, search, versions, descriptionFormat,
71
- }) => ({
72
+ }) => ({ // this doesn't use baseParams so looks different from the others
72
73
  job_invocation: {
73
74
  feature: REX_FEATURES.KATELLO_PACKAGES_UPDATE_BY_SEARCH,
74
75
  inputs: { [PACKAGES_SEARCH_QUERY]: search, [SELECTED_UPDATE_VERSIONS]: versions },
@@ -56,7 +56,7 @@ import {
56
56
  setContentOverrides,
57
57
  } from './RepositorySetsActions';
58
58
 
59
- import { selectOrganization, selectOrganizationStatus } from '../../Cards/SystemPurposeCard/SystemPurposeSelectors';
59
+ import { selectOrganizationStatus } from '../../Cards/SystemPurposeCard/SystemPurposeSelectors';
60
60
  import { getOrganization } from '../../Cards/SystemPurposeCard/SystemPurposeActions';
61
61
 
62
62
  import { REPOSITORY_SETS_KEY, STATUSES, STATUS_TO_PARAM, PARAM_TO_FRIENDLY_NAME, PROVIDER_TYPES, PROVIDER_TYPE_PARAM_TO_FRIENDLY_NAME, PROVIDER_TYPE_TO_PARAM } from './RepositorySetsConstants.js';
@@ -172,9 +172,6 @@ const RepositorySetsTab = () => {
172
172
  organization_id: orgId,
173
173
  } = hostDetails;
174
174
 
175
- const {
176
- simple_content_access: simpleContentAccess,
177
- } = useSelector(state => selectOrganization(state, orgId));
178
175
  const orgStatus = useSelector(state => selectOrganizationStatus(state, orgId));
179
176
  const orgNotLoaded = orgStatus !== STATUS.RESOLVED;
180
177
 
@@ -265,14 +262,14 @@ const RepositorySetsTab = () => {
265
262
  }
266
263
  return getHostRepositorySets({
267
264
  content_access_mode_env: toggleGroupState === LIMIT_TO_ENVIRONMENT,
268
- content_access_mode_all: simpleContentAccess,
265
+ content_access_mode_all: true,
269
266
  host_id: hostId,
270
267
  ...apiSortParams,
271
268
  ...modifiedParams,
272
269
  });
273
270
  },
274
271
  [hostId, statusSelected, STATUS_LABEL, repoTypeSelected,
275
- REPO_TYPE_LABEL, toggleGroupState, LIMIT_TO_ENVIRONMENT, simpleContentAccess, apiSortParams],
272
+ REPO_TYPE_LABEL, toggleGroupState, LIMIT_TO_ENVIRONMENT, apiSortParams],
276
273
  );
277
274
 
278
275
  useEffect(() => {
@@ -377,7 +374,7 @@ const RepositorySetsTab = () => {
377
374
  singular: singular || selectedCount === 1,
378
375
  }));
379
376
  };
380
- const bulkParams = () => fetchBulkParams('cp_content_id');
377
+ const bulkParams = () => fetchBulkParams({ idColumnName: 'cp_content_id' });
381
378
  const enableRepoSets = () => updateOverrides({ enabled: true, search: bulkParams() });
382
379
  const disableRepoSets = () => updateOverrides({ enabled: false, search: bulkParams() });
383
380
  const resetToDefaultRepoSets = () => updateOverrides({ remove: true, search: bulkParams() });
@@ -501,21 +498,10 @@ const RepositorySetsTab = () => {
501
498
 
502
499
  const hostEnvText = 'the "{contentViewName}" content view and "{lifecycleEnvironmentName}" environment';
503
500
 
504
- const scaAlert = (toggleGroupState === LIMIT_TO_ENVIRONMENT ?
501
+ const alertText = (toggleGroupState === LIMIT_TO_ENVIRONMENT ?
505
502
  `Showing only repositories in ${hostEnvText}.` :
506
503
  'Showing all available repositories.');
507
504
 
508
- const nonScaAlert = (toggleGroupState === LIMIT_TO_ENVIRONMENT ?
509
- `Showing repositories in ${hostEnvText} that are available through subscriptions.` :
510
- 'Showing all repositories available through subscriptions.');
511
-
512
- let alertText;
513
- if (simpleContentAccess) {
514
- alertText = scaAlert;
515
- } else {
516
- alertText = nonScaAlert;
517
- }
518
-
519
505
  return (
520
506
  <div>
521
507
  <div id="repo-sets-tab">
@@ -2,10 +2,11 @@ import React, { useState, useCallback } from 'react';
2
2
  import { FormattedMessage } from 'react-intl';
3
3
  import {
4
4
  Skeleton, Split, SplitItem, ActionList, ActionListItem, Dropdown,
5
- DropdownItem, DropdownToggle, DropdownToggleAction,
5
+ DropdownItem, DropdownToggle, DropdownToggleAction, Alert,
6
6
  } from '@patternfly/react-core';
7
7
  import { translate as __ } from 'foremanReact/common/I18n';
8
8
  import { TableVariant, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table';
9
+ import { ExclamationTriangleIcon } from '@patternfly/react-icons';
9
10
  import { useSelector } from 'react-redux';
10
11
  import { selectAPIResponse } from 'foremanReact/redux/API/APISelectors';
11
12
  import { useBulkSelect, useUrlParams } from 'foremanReact/components/PF4/TableIndexPage/Table/TableHooks';
@@ -27,6 +28,7 @@ import { HOST_TRACES_KEY } from './HostTracesConstants';
27
28
 
28
29
  const invokeRexJobs = ['create_job_invocations'];
29
30
  const createBookmarks = ['create_bookmarks'];
31
+ const containsStaticType = (results = []) => results.some(result => result.app_type === 'static');
30
32
 
31
33
  const TracesTab = () => {
32
34
  const hostDetails = useSelector(state => selectAPIResponse(state, 'HOST_DETAILS'));
@@ -78,13 +80,16 @@ const TracesTab = () => {
78
80
  const tracesSearchQuery = id => `id = ${id}`;
79
81
  const {
80
82
  selectOne, isSelected, searchQuery, selectedCount, isSelectable,
81
- updateSearchQuery, selectNone, fetchBulkParams, ...selectAll
83
+ updateSearchQuery, selectNone, fetchBulkParams, selectedResults,
84
+ selectAllMode, ...selectAll
82
85
  } = useBulkSelect({
83
86
  results,
84
87
  metadata: meta,
85
88
  isSelectable: result => !!result.restart_command,
86
89
  initialSearchQuery: searchParam || '',
87
90
  });
91
+ const willRestartHost = containsStaticType(selectedResults)
92
+ || (selectAllMode && containsStaticType(results));
88
93
 
89
94
  const BulkRestartTracesAction = () => resolveTraces({
90
95
  hostname, search: fetchBulkParams(),
@@ -163,7 +168,7 @@ const TracesTab = () => {
163
168
  ouiaId="bulk_actions"
164
169
  splitButtonItems={[
165
170
  <DropdownToggleAction key="action" onClick={onBulkRestartApp}>
166
- {__('Restart app')}
171
+ {willRestartHost ? __('Reboot host') : __('Restart app')}
167
172
  </DropdownToggleAction>,
168
173
  ]}
169
174
  isDisabled={selectedCount === 0}
@@ -192,6 +197,9 @@ const TracesTab = () => {
192
197
  return (
193
198
  <div id="traces-tab">
194
199
  <h3>{__('Tracer helps administrators identify applications that need to be restarted after a system is patched.')}</h3>
200
+ {willRestartHost && (
201
+ <Alert isInline variant="warning" ouiaId="host-will-reboot-alert" title={__('At least one of the selected items requires the host to reboot')} />
202
+ )}
195
203
  <TableWrapper
196
204
  {...{
197
205
  emptyContentTitle,
@@ -267,7 +275,7 @@ const TracesTab = () => {
267
275
  'aria-label': `check-${application}`,
268
276
  },
269
277
  isSelected: isSelected(id),
270
- onSelect: (event, selected) => selectOne(selected, id),
278
+ onSelect: (event, selected) => selectOne(selected, id, result),
271
279
  rowIndex,
272
280
  variant: 'checkbox',
273
281
  }}
@@ -277,7 +285,7 @@ const TracesTab = () => {
277
285
  }
278
286
  <Td>{application}</Td>
279
287
  <Td>{appType}</Td>
280
- <Td>{helper}</Td>
288
+ <Td>{appType === 'static' ? <ExclamationTriangleIcon /> : null} {helper}</Td>
281
289
  {showActions && (
282
290
  <Td
283
291
  actions={{
@@ -0,0 +1,31 @@
1
+ {
2
+ "total": 3,
3
+ "subtotal": 3,
4
+ "page": 1,
5
+ "per_page": 20,
6
+ "error": null,
7
+ "search": null,
8
+ "results": [
9
+ {
10
+ "id": 1682,
11
+ "name": "libmagic1",
12
+ "version": "1:5.41-3",
13
+ "architecture": "amd64",
14
+ "upgradable_versions": ["1:5.41-3ubuntu0.1"]
15
+ },
16
+ {
17
+ "id": 1562,
18
+ "name": "libapt-pkg6.0",
19
+ "version": "2.4.9",
20
+ "architecture": "amd64",
21
+ "upgradable_versions": ["2.4.10"]
22
+ },
23
+ {
24
+ "id": 676,
25
+ "name": "libacl1",
26
+ "version": "2.3.1-1",
27
+ "architecture": "amd64",
28
+ "upgradable_versions": null
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,226 @@
1
+ import React from 'react';
2
+ import { renderWithRedux, patientlyWaitFor, fireEvent, within } from 'react-testing-lib-wrapper';
3
+ import { nockInstance, assertNockRequest, mockForemanAutocomplete } from '../../../../../test-utils/nockWrapper';
4
+ import katelloApi from '../../../../../services/api';
5
+ import mockDebsData from './installableDebs.fixtures.json';
6
+ import DebInstallModal from '../DebsTab/DebInstallModal';
7
+ import { HOST_INSTALLABLE_DEBS_KEY } from '../DebsTab/InstallableDebsConstants';
8
+ import { REX_FEATURES } from '../RemoteExecutionConstants';
9
+
10
+ jest.mock('../../hostDetailsHelpers', () => ({
11
+ ...jest.requireActual('../../hostDetailsHelpers'),
12
+ userPermissionsFromHostDetails: () => ({
13
+ create_job_invocations: true,
14
+ edit_hosts: true,
15
+ }),
16
+ }));
17
+
18
+ const contentFacetAttributes = {
19
+ id: 11,
20
+ uuid: 'e5761ea3-4117-4ecf-83d0-b694f99b389e',
21
+ content_view_default: false,
22
+ lifecycle_environment_library: false,
23
+ };
24
+
25
+ const renderOptions = (facetAttributes = contentFacetAttributes) => ({
26
+ apiNamespace: HOST_INSTALLABLE_DEBS_KEY,
27
+ initialState: {
28
+ API: {
29
+ HOST_DETAILS: {
30
+ response: {
31
+ id: 1,
32
+ name: 'test-host',
33
+ content_facet_attributes: { ...facetAttributes },
34
+ },
35
+ status: 'RESOLVED',
36
+ },
37
+ },
38
+ },
39
+ });
40
+
41
+ const hostInstallableDebs = katelloApi.getApiUrl('/debs');
42
+ const autocompleteUrl = '/hosts/1/debs/auto_complete_search';
43
+
44
+ const defaultQuery = {
45
+ host_id: 1,
46
+ per_page: 20,
47
+ page: 1,
48
+ packages_restrict_not_installed: true,
49
+ packages_restrict_applicable: false,
50
+ };
51
+
52
+ let firstPackages;
53
+
54
+ beforeEach(() => {
55
+ const { results } = mockDebsData;
56
+ [firstPackages] = results;
57
+ });
58
+
59
+ test('Can call API for installable deb packages and show on screen on page load', async (done) => {
60
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
61
+
62
+ const scope = nockInstance
63
+ .get(hostInstallableDebs)
64
+ .query(defaultQuery)
65
+ .reply(200, mockDebsData);
66
+
67
+ const { getAllByText }
68
+ = renderWithRedux(<DebInstallModal
69
+ isOpen
70
+ closeModal={jest.fn()}
71
+ hostId={1}
72
+ hostName="test-host"
73
+ triggerPackageInstall={jest.fn()}
74
+ />, renderOptions());
75
+
76
+ // Assert that the packages are now showing on the screen, but wait for them to appear.
77
+ await patientlyWaitFor(() => expect(getAllByText(firstPackages.name)[0]).toBeInTheDocument());
78
+ // Assert request was made and completed, see helper function
79
+ assertNockRequest(autocompleteScope);
80
+ assertNockRequest(scope, done); // Pass jest callback to confirm test is done
81
+ });
82
+
83
+ test('Can handle no installable deb packages being present', async (done) => {
84
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
85
+
86
+ const noResults = {
87
+ total: 0,
88
+ subtotal: 0,
89
+ page: 1,
90
+ per_page: 20,
91
+ results: [],
92
+ };
93
+
94
+ const scope = nockInstance
95
+ .get(hostInstallableDebs)
96
+ .query(defaultQuery)
97
+ .reply(200, noResults);
98
+
99
+ const { queryByText }
100
+ = renderWithRedux(<DebInstallModal
101
+ isOpen
102
+ closeModal={jest.fn()}
103
+ hostId={1}
104
+ hostName="test-host"
105
+ triggerPackageInstall={jest.fn()}
106
+ />, renderOptions());
107
+
108
+ // Assert that there are not any packages showing on the screen.
109
+ await patientlyWaitFor(() => expect(queryByText('No packages available to install')).toBeInTheDocument());
110
+ // Assert request was made and completed, see helper function
111
+ assertNockRequest(autocompleteScope);
112
+ assertNockRequest(scope, done); // Pass jest callback to confirm test is done
113
+ });
114
+
115
+
116
+ test('Can install a deb package via remote execution', async (done) => {
117
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
118
+ const scope = nockInstance
119
+ .get(hostInstallableDebs)
120
+ .query(defaultQuery)
121
+ .reply(200, mockDebsData);
122
+ const triggerPackageInstall = jest.fn();
123
+
124
+ const {
125
+ getAllByText, getByText, getByRole,
126
+ } = renderWithRedux(<DebInstallModal
127
+ isOpen
128
+ closeModal={jest.fn()}
129
+ hostId={1}
130
+ hostName="test-host"
131
+ triggerPackageInstall={triggerPackageInstall}
132
+ />, renderOptions());
133
+
134
+ await patientlyWaitFor(() => expect(getAllByText(firstPackages.name)[0]).toBeInTheDocument());
135
+ // find and select the first two packages
136
+ const checkbox1 = getByRole('checkbox', { name: 'Select row 0' });
137
+ const checkbox2 = getByRole('checkbox', { name: 'Select row 1' });
138
+ fireEvent.click(checkbox1);
139
+ fireEvent.click(checkbox2);
140
+ // click the Install dropdown
141
+ const footer = getByRole('contentinfo');
142
+ const dropdown = await patientlyWaitFor(() => within(footer).getByRole('button', { name: 'Select' }));
143
+ fireEvent.click(dropdown);
144
+ const rexOption = getByText('Install via remote execution');
145
+ fireEvent.click(rexOption);
146
+
147
+ expect(triggerPackageInstall).toHaveBeenCalled();
148
+ assertNockRequest(autocompleteScope);
149
+ assertNockRequest(scope, done);
150
+ });
151
+
152
+ test('Can install a deb package via customized remote execution', async (done) => {
153
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
154
+ const scope = nockInstance
155
+ .get(hostInstallableDebs)
156
+ .query(defaultQuery)
157
+ .reply(200, mockDebsData);
158
+
159
+ const {
160
+ getAllByText, queryByText, getByRole,
161
+ } = renderWithRedux(<DebInstallModal
162
+ isOpen
163
+ closeModal={jest.fn()}
164
+ hostId={1}
165
+ hostName="test-host"
166
+ triggerPackageInstall={jest.fn()}
167
+ />, renderOptions());
168
+
169
+ await patientlyWaitFor(() => expect(getAllByText(firstPackages.name)[0]).toBeInTheDocument());
170
+ // find and select the first two packages
171
+ const checkbox1 = getByRole('checkbox', { name: 'Select row 0' });
172
+ const checkbox2 = getByRole('checkbox', { name: 'Select row 1' });
173
+ fireEvent.click(checkbox1);
174
+ fireEvent.click(checkbox2);
175
+ // click the Install dropdown
176
+ const footer = getByRole('contentinfo');
177
+ const dropdown = await patientlyWaitFor(() => within(footer).getByRole('button', { name: 'Select' }));
178
+ fireEvent.click(dropdown);
179
+ const customizedRexOption = queryByText('Install via customized remote execution');
180
+ expect(customizedRexOption).toBeInTheDocument();
181
+ expect(customizedRexOption).toHaveAttribute(
182
+ 'href',
183
+ `/job_invocations/new?feature=${REX_FEATURES.KATELLO_PACKAGE_INSTALL}&search=name%20%5E%20(test-host)&inputs%5Bpackage%5D=duck,cheetah`,
184
+ );
185
+ assertNockRequest(autocompleteScope);
186
+ assertNockRequest(scope, done);
187
+ });
188
+
189
+ test('Uses packages_install_by_search_query template when in select all mode', async (done) => {
190
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
191
+ const scope = nockInstance
192
+ .get(hostInstallableDebs)
193
+ .query(defaultQuery)
194
+ .reply(200, mockDebsData);
195
+
196
+ const {
197
+ getAllByText, queryByText, getByRole,
198
+ } = renderWithRedux(<DebInstallModal
199
+ isOpen
200
+ closeModal={jest.fn()}
201
+ hostId={1}
202
+ hostName="test-host"
203
+ triggerPackageInstall={jest.fn()}
204
+ />, renderOptions());
205
+
206
+ await patientlyWaitFor(() => expect(getAllByText(firstPackages.name)[0]).toBeInTheDocument());
207
+ // find and click the select all checkbox
208
+ const selectAllCheckbox = getByRole('checkbox', { name: 'Select all' });
209
+ fireEvent.click(selectAllCheckbox);
210
+ // find and deselect the first package
211
+ const checkbox1 = getByRole('checkbox', { name: 'Select row 0' });
212
+ fireEvent.click(checkbox1);
213
+ // click the Install dropdown
214
+ const footer = getByRole('contentinfo');
215
+ const dropdown = await patientlyWaitFor(() => within(footer).getByRole('button', { name: 'Select' }));
216
+ fireEvent.click(dropdown);
217
+ const customizedRexOption = queryByText('Install via customized remote execution');
218
+ expect(customizedRexOption).toBeInTheDocument();
219
+ expect(customizedRexOption).toHaveAttribute(
220
+ 'href',
221
+ `/job_invocations/new?feature=${REX_FEATURES.KATELLO_PACKAGE_INSTALL_BY_SEARCH}&search=name%20%5E%20(test-host)&inputs%5BPackage%20search%20query%5D=id%20!%5E%20(32376)`,
222
+ );
223
+ assertNockRequest(autocompleteScope);
224
+ assertNockRequest(scope, done);
225
+ });
226
+