katello 4.11.1 → 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 (349) 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 +76 -85
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +76 -85
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +80 -86
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +79 -85
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +91 -88
  8. data/app/assets/javascripts/katello/locale/de/katello.js +97 -94
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +76 -85
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +76 -85
  11. data/app/assets/javascripts/katello/locale/el/katello.js +86 -86
  12. data/app/assets/javascripts/katello/locale/en/katello.js +76 -85
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +88 -85
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +76 -85
  15. data/app/assets/javascripts/katello/locale/es/katello.js +94 -94
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +76 -85
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +97 -94
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +80 -86
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +76 -85
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +76 -85
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +76 -85
  22. data/app/assets/javascripts/katello/locale/id/katello.js +76 -85
  23. data/app/assets/javascripts/katello/locale/it/katello.js +89 -86
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +97 -94
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +92 -92
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +76 -85
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +91 -94
  28. data/app/assets/javascripts/katello/locale/locale/katello.js +1051 -1048
  29. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +76 -85
  30. data/app/assets/javascripts/katello/locale/mr/katello.js +76 -85
  31. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +76 -85
  32. data/app/assets/javascripts/katello/locale/or/katello.js +76 -85
  33. data/app/assets/javascripts/katello/locale/pa/katello.js +76 -85
  34. data/app/assets/javascripts/katello/locale/pl/katello.js +76 -85
  35. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +76 -85
  36. data/app/assets/javascripts/katello/locale/pt/katello.js +76 -85
  37. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +94 -94
  38. data/app/assets/javascripts/katello/locale/ro/katello.js +76 -85
  39. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +76 -85
  40. data/app/assets/javascripts/katello/locale/ru/katello.js +91 -94
  41. data/app/assets/javascripts/katello/locale/sl/katello.js +76 -85
  42. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +80 -86
  43. data/app/assets/javascripts/katello/locale/ta/katello.js +76 -85
  44. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +76 -85
  45. data/app/assets/javascripts/katello/locale/te/katello.js +76 -85
  46. data/app/assets/javascripts/katello/locale/tr/katello.js +76 -85
  47. data/app/assets/javascripts/katello/locale/vi/katello.js +76 -85
  48. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +76 -85
  49. data/app/assets/javascripts/katello/locale/zh/katello.js +76 -85
  50. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +97 -94
  51. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +91 -94
  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/hosts_controller_extensions.rb +7 -3
  61. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +1 -17
  62. data/app/helpers/katello/concerns/dashboard_helper_extensions.rb +0 -20
  63. data/app/lib/actions/katello/content_view/publish.rb +3 -3
  64. data/app/lib/actions/katello/content_view_version/auto_create_products.rb +4 -4
  65. data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +5 -5
  66. data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +5 -5
  67. data/app/lib/actions/katello/content_view_version/import.rb +14 -13
  68. data/app/lib/actions/katello/content_view_version/import_library.rb +4 -4
  69. data/app/lib/actions/katello/content_view_version/import_repository.rb +3 -3
  70. data/app/lib/actions/katello/content_view_version/reset_content_view_repositories_from_metadata.rb +2 -2
  71. data/app/lib/actions/katello/host/hypervisors_update.rb +0 -1
  72. data/app/lib/actions/katello/organization/manifest_delete.rb +1 -1
  73. data/app/lib/actions/katello/organization/manifest_refresh.rb +16 -16
  74. data/app/lib/actions/katello/repository/sync.rb +2 -4
  75. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +20 -15
  76. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +17 -14
  77. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +11 -11
  78. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +18 -13
  79. data/app/lib/actions/pulp3/repository/import_upload.rb +13 -5
  80. data/app/lib/actions/pulp3/repository/save_artifact.rb +23 -12
  81. data/app/lib/katello/api/v2/error_handling.rb +1 -1
  82. data/app/lib/katello/lazy_accessor.rb +6 -6
  83. data/app/lib/katello/resources/candlepin/owner.rb +2 -2
  84. data/app/mailers/katello/errata_mailer.rb +3 -3
  85. data/app/models/katello/concerns/host_managed_extensions.rb +29 -76
  86. data/app/models/katello/concerns/hostgroup_extensions.rb +4 -2
  87. data/app/models/katello/concerns/organization_extensions.rb +1 -1
  88. data/app/models/katello/concerns/pulp_database_unit.rb +1 -1
  89. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -27
  90. data/app/models/katello/content_view.rb +11 -6
  91. data/app/models/katello/content_view_version.rb +2 -0
  92. data/app/models/katello/deb.rb +8 -0
  93. data/app/models/katello/host/content_facet.rb +19 -14
  94. data/app/models/katello/host/subscription_facet.rb +0 -19
  95. data/app/models/katello/host_tracer.rb +9 -5
  96. data/app/models/katello/installed_deb.rb +1 -0
  97. data/app/models/katello/repository.rb +3 -2
  98. data/app/models/katello/trace_status.rb +6 -2
  99. data/app/overrides/add_organization_attributes.rb +0 -18
  100. data/app/presenters/katello/host_deb_presenter.rb +23 -0
  101. data/app/services/katello/candlepin/consumer.rb +0 -4
  102. data/app/services/katello/candlepin/event_handler.rb +6 -25
  103. data/app/services/katello/candlepin/message_handler.rb +1 -21
  104. data/app/services/katello/host/profiles_uploader.rb +17 -6
  105. data/app/services/katello/host_status_manager.rb +0 -22
  106. data/app/services/katello/organization_creator.rb +2 -2
  107. data/app/services/katello/pulp3/api/apt.rb +1 -1
  108. data/app/services/katello/pulp3/content_view_version/export.rb +2 -2
  109. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +1 -0
  110. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +3 -0
  111. data/app/services/katello/pulp3/repository/apt.rb +16 -6
  112. data/app/services/katello/registration_manager.rb +1 -13
  113. data/app/views/katello/api/v2/host_debs/base.json.rabl +2 -0
  114. data/app/views/katello/api/v2/hosts/base.json.rabl +9 -0
  115. data/app/views/katello/api/v2/subscription_facet/base_with_root.json.rabl +0 -3
  116. data/app/views/katello/api/v2/subscription_facet/show.json.rabl +3 -0
  117. data/app/views/katello/sync_management/index.html.erb +14 -13
  118. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +20 -16
  119. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +6 -4
  120. data/app/views/overrides/organizations/_edit_override.html.erb +0 -12
  121. data/db/migrate/20131014225132_add_users_fields.rb +0 -1
  122. data/db/migrate/20150603045418_remove_user_fields.rb +0 -2
  123. data/db/migrate/20160404132250_remove_katello_from_notification_name.rb +4 -22
  124. data/db/migrate/20160505181337_rename_katello_settings.rb +2 -2
  125. data/db/migrate/20200818192230_update_system_purpose_status.rb +9 -3
  126. data/db/migrate/20240111032511_add_index_to_host_installed_packages.rb +16 -0
  127. data/db/migrate/20240123120109_remove_pulp_export_destination_setting.rb +9 -0
  128. data/db/migrate/20240207191223_remove_entitlement_mode_host_statuses.rb +30 -0
  129. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  130. data/engines/bastion/app/assets/javascripts/bastion/bastion.js +0 -2
  131. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +6 -2
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +0 -4
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +0 -1
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +45 -29
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js +0 -10
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +0 -1
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -21
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions.html +0 -5
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +0 -7
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +5 -5
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +9 -1
  142. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -6
  143. data/lib/katello/engine.rb +0 -3
  144. data/lib/katello/plugin.rb +2 -11
  145. data/lib/katello/tasks/rubocop.rake +0 -9
  146. data/lib/katello/tasks/unify_hosts.rake +0 -1
  147. data/lib/katello/tasks/upgrades/4.12/update_content_access_modes.rake +35 -0
  148. data/lib/katello/version.rb +1 -1
  149. data/locale/action_names.rb +12 -6
  150. data/locale/bn/katello.po +19 -28
  151. data/locale/bn/katello.po.time_stamp +0 -0
  152. data/locale/bn/katello.pox +0 -0
  153. data/locale/bn_IN/katello.po +19 -28
  154. data/locale/bn_IN/katello.po.time_stamp +0 -0
  155. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  156. data/locale/ca/katello.po +20 -29
  157. data/locale/ca/katello.po.time_stamp +0 -0
  158. data/locale/cs/katello.po +19 -29
  159. data/locale/cs/katello.po.time_stamp +0 -0
  160. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  161. data/locale/cs_CZ/katello.po +20 -29
  162. data/locale/cs_CZ/katello.po.time_stamp +0 -0
  163. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  164. data/locale/de/katello.po +20 -29
  165. data/locale/de/katello.po.time_stamp +0 -0
  166. data/locale/de_AT/katello.po +19 -28
  167. data/locale/de_AT/katello.po.time_stamp +0 -0
  168. data/locale/de_DE/katello.po +19 -28
  169. data/locale/de_DE/katello.po.time_stamp +0 -0
  170. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  171. data/locale/el/katello.po +20 -29
  172. data/locale/el/katello.po.time_stamp +0 -0
  173. data/locale/en/katello.po +19 -28
  174. data/locale/en/katello.po.time_stamp +0 -0
  175. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  176. data/locale/en_GB/katello.po +19 -28
  177. data/locale/en_GB/katello.po.time_stamp +0 -0
  178. data/locale/en_US/katello.po +19 -28
  179. data/locale/en_US/katello.po.time_stamp +0 -0
  180. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  181. data/locale/es/katello.po +20 -29
  182. data/locale/es/katello.po.time_stamp +0 -0
  183. data/locale/et_EE/katello.po +19 -28
  184. data/locale/et_EE/katello.po.time_stamp +0 -0
  185. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/fr/katello.po +20 -29
  187. data/locale/fr/katello.po.time_stamp +0 -0
  188. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  189. data/locale/gl/katello.po +20 -29
  190. data/locale/gl/katello.po.time_stamp +0 -0
  191. data/locale/gu/katello.po +19 -28
  192. data/locale/gu/katello.po.time_stamp +0 -0
  193. data/locale/he_IL/katello.po +19 -28
  194. data/locale/he_IL/katello.po.time_stamp +0 -0
  195. data/locale/hi/katello.po +19 -28
  196. data/locale/hi/katello.po.time_stamp +0 -0
  197. data/locale/id/katello.po +19 -28
  198. data/locale/id/katello.po.time_stamp +0 -0
  199. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/it/katello.po +20 -29
  201. data/locale/it/katello.po.time_stamp +0 -0
  202. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  203. data/locale/ja/katello.po +20 -29
  204. data/locale/ja/katello.po.time_stamp +0 -0
  205. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/ka/katello.po +20 -29
  207. data/locale/ka/katello.po.time_stamp +0 -0
  208. data/locale/katello.pot +363 -348
  209. data/locale/kn/katello.po +19 -28
  210. data/locale/kn/katello.po.time_stamp +0 -0
  211. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/ko/katello.po +20 -29
  213. data/locale/ko/katello.po.time_stamp +0 -0
  214. data/locale/messages.mo +0 -0
  215. data/locale/ml_IN/katello.po +19 -28
  216. data/locale/ml_IN/katello.po.time_stamp +0 -0
  217. data/locale/mr/katello.po +19 -28
  218. data/locale/mr/katello.po.time_stamp +0 -0
  219. data/locale/nl_NL/katello.po +19 -28
  220. data/locale/nl_NL/katello.po.time_stamp +0 -0
  221. data/locale/or/katello.po +19 -28
  222. data/locale/or/katello.po.time_stamp +0 -0
  223. data/locale/pa/katello.po +19 -28
  224. data/locale/pa/katello.po.time_stamp +0 -0
  225. data/locale/pl/katello.po +19 -28
  226. data/locale/pl/katello.po.time_stamp +0 -0
  227. data/locale/pl_PL/katello.po +19 -28
  228. data/locale/pl_PL/katello.po.time_stamp +0 -0
  229. data/locale/pt/katello.po +19 -28
  230. data/locale/pt/katello.po.time_stamp +0 -0
  231. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  232. data/locale/pt_BR/katello.po +20 -29
  233. data/locale/pt_BR/katello.po.time_stamp +0 -0
  234. data/locale/ro/katello.po +19 -28
  235. data/locale/ro/katello.po.time_stamp +0 -0
  236. data/locale/ro_RO/katello.po +19 -28
  237. data/locale/ro_RO/katello.po.time_stamp +0 -0
  238. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  239. data/locale/ru/katello.po +20 -29
  240. data/locale/ru/katello.po.time_stamp +0 -0
  241. data/locale/sl/katello.po +19 -28
  242. data/locale/sl/katello.po.time_stamp +0 -0
  243. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  244. data/locale/sv_SE/katello.po +20 -29
  245. data/locale/sv_SE/katello.po.time_stamp +0 -0
  246. data/locale/ta/katello.po +19 -28
  247. data/locale/ta/katello.po.time_stamp +0 -0
  248. data/locale/ta_IN/katello.po +19 -28
  249. data/locale/ta_IN/katello.po.time_stamp +0 -0
  250. data/locale/te/katello.po +19 -28
  251. data/locale/te/katello.po.time_stamp +0 -0
  252. data/locale/tr/katello.po +19 -28
  253. data/locale/tr/katello.po.time_stamp +0 -0
  254. data/locale/vi/katello.po +19 -28
  255. data/locale/vi/katello.po.time_stamp +0 -0
  256. data/locale/vi_VN/katello.po +19 -28
  257. data/locale/vi_VN/katello.po.time_stamp +0 -0
  258. data/locale/zh/katello.po +19 -28
  259. data/locale/zh/katello.po.time_stamp +0 -0
  260. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  261. data/locale/zh_CN/katello.po +20 -29
  262. data/locale/zh_CN/katello.po.time_stamp +0 -0
  263. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  264. data/locale/zh_TW/katello.po +20 -29
  265. data/locale/zh_TW/katello.po.time_stamp +0 -0
  266. data/package.json +0 -1
  267. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +4 -0
  268. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +4 -1
  269. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +250 -0
  270. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.scss +3 -0
  271. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +585 -0
  272. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.scss +12 -0
  273. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsActions.js +13 -0
  274. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsConstants.js +13 -0
  275. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/HostDebsSelectors.js +16 -0
  276. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsActions.js +17 -0
  277. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsConstants.js +3 -0
  278. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/InstallableDebsSelectors.js +16 -0
  279. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +1 -8
  280. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +2 -0
  281. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +4 -18
  282. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +13 -5
  283. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debs.fixtures.json +31 -0
  284. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsInstallModal.test.js +226 -0
  285. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsTab.test.js +420 -0
  286. data/webpack/components/extensions/HostDetails/Tabs/__tests__/installableDebs.fixtures.json +63 -0
  287. data/webpack/components/extensions/HostDetails/Tabs/__tests__/traces.fixtures.json +11 -1
  288. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +63 -3
  289. data/webpack/scenes/ContentViews/ContentViewsConstants.js +3 -0
  290. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +0 -13
  291. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +23 -1
  292. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +19 -1
  293. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +0 -13
  294. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +37 -3
  295. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +10 -2
  296. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +0 -13
  297. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -5
  298. data/webpack/scenes/Organizations/OrganizationSelectors.js +0 -3
  299. data/webpack/scenes/Subscriptions/Manifest/index.js +1 -4
  300. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +3 -25
  301. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +0 -3
  302. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +0 -3
  303. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +0 -22
  304. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsSelectors.test.js.snap +0 -3
  305. data/webpack/scenes/Subscriptions/index.js +1 -2
  306. metadata +93 -190
  307. data/app/controllers/katello/concerns/content_facet_hosts_controller_extensions.rb +0 -22
  308. data/app/models/katello/concerns/widget_extensions.rb +0 -23
  309. data/app/models/katello/purpose_addons_status.rb +0 -28
  310. data/app/models/katello/purpose_role_status.rb +0 -28
  311. data/app/models/katello/purpose_sla_status.rb +0 -28
  312. data/app/models/katello/purpose_status.rb +0 -71
  313. data/app/models/katello/purpose_usage_status.rb +0 -28
  314. data/app/models/katello/subscription_status.rb +0 -71
  315. data/app/services/katello/candlepin/system_purpose.rb +0 -49
  316. data/app/views/dashboard/_subscription_status_widget.html.erb +0 -37
  317. data/app/views/dashboard/_subscription_widget.html.erb +0 -85
  318. data/app/views/overrides/organizations/_index_header_override.html.erb +0 -3
  319. data/app/views/overrides/organizations/_index_row_override.html.erb +0 -3
  320. data/app/views/overrides/organizations/_step_1_override.html.erb +0 -10
  321. data/config/locales/README +0 -10
  322. data/config/locales/bn.yml +0 -182
  323. data/config/locales/compare_upstream.sh +0 -21
  324. data/config/locales/cs.yml +0 -211
  325. data/config/locales/de.yml +0 -203
  326. data/config/locales/en.yml +0 -205
  327. data/config/locales/es.yml +0 -199
  328. data/config/locales/fr.yml +0 -222
  329. data/config/locales/gu.yml +0 -181
  330. data/config/locales/hi.yml +0 -199
  331. data/config/locales/it.yml +0 -205
  332. data/config/locales/ja.yml +0 -197
  333. data/config/locales/kn.yml +0 -199
  334. data/config/locales/ko.yml +0 -197
  335. data/config/locales/mr.yml +0 -178
  336. data/config/locales/or.yml +0 -181
  337. data/config/locales/pa.yml +0 -181
  338. data/config/locales/pt-BR.yml +0 -207
  339. data/config/locales/pt.yml +0 -207
  340. data/config/locales/ru.yml +0 -257
  341. data/config/locales/ta.yml +0 -181
  342. data/config/locales/te.yml +0 -181
  343. data/config/locales/update.sh +0 -14
  344. data/config/locales/zh-CN.yml +0 -199
  345. data/config/locales/zh-TW.yml +0 -199
  346. data/engines/bastion/app/assets/javascripts/bastion/bastion-bootstrap.js +0 -17
  347. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/content-access-mode-banner.directive.js +0 -22
  348. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +0 -10
  349. 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,
@@ -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(() => {
@@ -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
+