katello 4.2.1 → 4.3.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 (498) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/katello.common.js +0 -67
  3. data/app/assets/javascripts/katello/common/katello.js +0 -27
  4. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  5. data/app/assets/stylesheets/katello/katello.scss +0 -1
  6. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +10 -2
  7. data/app/controllers/katello/api/v2/api_controller.rb +35 -9
  8. data/app/controllers/katello/api/v2/capsule_content_controller.rb +16 -2
  9. data/app/controllers/katello/api/v2/content_view_components_controller.rb +22 -1
  10. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +65 -1
  11. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +5 -1
  12. data/app/controllers/katello/api/v2/content_views_controller.rb +13 -6
  13. data/app/controllers/katello/api/v2/debs_controller.rb +74 -1
  14. data/app/controllers/katello/api/v2/errata_controller.rb +13 -10
  15. data/app/controllers/katello/api/v2/file_units_controller.rb +1 -0
  16. data/app/controllers/katello/api/v2/generic_content_units_controller.rb +1 -1
  17. data/app/controllers/katello/api/v2/host_errata_controller.rb +46 -5
  18. data/app/controllers/katello/api/v2/host_tracer_controller.rb +2 -1
  19. data/app/controllers/katello/api/v2/module_streams_controller.rb +4 -0
  20. data/app/controllers/katello/api/v2/organizations_controller.rb +22 -7
  21. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
  22. data/app/controllers/katello/api/v2/repositories_controller.rb +36 -19
  23. data/app/controllers/katello/api/v2/subscriptions_controller.rb +0 -8
  24. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +5 -1
  25. data/app/controllers/katello/concerns/api/v2/bulk_extensions.rb +40 -0
  26. data/app/controllers/katello/concerns/api/v2/host_errata_extensions.rb +4 -31
  27. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +1 -1
  28. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +1 -1
  29. data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +2 -6
  30. data/app/helpers/katello/katello_url_helper.rb +1 -1
  31. data/app/lib/actions/candlepin/abstract_async_task.rb +6 -3
  32. data/app/lib/actions/candlepin/async_hypervisors.rb +12 -8
  33. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +10 -1
  34. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +3 -3
  35. data/app/lib/actions/katello/cdn_configuration/update.rb +38 -0
  36. data/app/lib/actions/katello/content_view/remove.rb +18 -7
  37. data/app/lib/actions/katello/content_view_version/destroy.rb +2 -2
  38. data/app/lib/actions/katello/content_view_version/republish_repositories.rb +1 -1
  39. data/app/lib/actions/katello/repository/clone_contents.rb +1 -2
  40. data/app/lib/actions/katello/repository/destroy.rb +21 -5
  41. data/app/lib/actions/katello/repository/fetch_pxe_files.rb +1 -1
  42. data/app/lib/actions/katello/repository/finish_upload.rb +1 -1
  43. data/app/lib/actions/katello/repository/import_upload.rb +1 -1
  44. data/app/lib/actions/katello/repository/index_content.rb +19 -6
  45. data/app/lib/actions/katello/repository/metadata_generate.rb +2 -0
  46. data/app/lib/actions/katello/repository/multi_clone_contents.rb +1 -1
  47. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  48. data/app/lib/actions/katello/repository/sync.rb +3 -7
  49. data/app/lib/actions/katello/repository_set/scan_cdn.rb +0 -4
  50. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +1 -1
  51. data/app/lib/actions/pulp/orphan_cleanup/remove_unneeded_repos.rb +1 -1
  52. data/app/lib/actions/pulp/repository/clear.rb +1 -1
  53. data/app/lib/actions/pulp3/abstract_async_task.rb +10 -1
  54. data/app/lib/actions/pulp3/capsule_content/generate_metadata.rb +13 -18
  55. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +1 -11
  56. data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +1 -1
  57. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +3 -1
  58. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +25 -42
  59. data/app/lib/actions/pulp3/orchestration/repository/sync.rb +8 -1
  60. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +3 -3
  61. data/app/lib/actions/pulp3/repository/commit_upload.rb +1 -1
  62. data/app/lib/actions/pulp3/repository/import_upload.rb +8 -4
  63. data/app/lib/actions/pulp3/repository/multi_copy_content.rb +1 -1
  64. data/app/lib/actions/pulp3/repository/multi_copy_units.rb +1 -1
  65. data/app/lib/actions/pulp3/repository/presenters/abstract_sync_presenter.rb +18 -0
  66. data/app/lib/actions/pulp3/repository/presenters/content_unit_presenter.rb +7 -2
  67. data/app/lib/actions/pulp3/repository/presenters/repair_presenter.rb +6 -1
  68. data/app/lib/actions/pulp3/repository/save_artifact.rb +14 -4
  69. data/app/lib/katello/errors.rb +2 -0
  70. data/app/lib/katello/resources/candlepin/consumer.rb +0 -20
  71. data/app/lib/katello/resources/candlepin/proxy.rb +8 -2
  72. data/app/lib/katello/resources/candlepin/upstream_consumer.rb +2 -0
  73. data/app/lib/katello/resources/cdn/katello_cdn.rb +68 -0
  74. data/app/lib/katello/resources/cdn.rb +61 -29
  75. data/app/lib/katello/util/cdn_var_substitutor.rb +15 -9
  76. data/app/lib/katello/util/package.rb +22 -0
  77. data/app/lib/katello/util/path_with_substitutions.rb +12 -14
  78. data/app/models/katello/activation_key.rb +10 -0
  79. data/app/models/katello/ansible_collection.rb +1 -1
  80. data/app/models/katello/authorization/repository.rb +4 -4
  81. data/app/models/katello/candlepin/repository_mapper.rb +5 -1
  82. data/app/models/katello/cdn_configuration.rb +32 -0
  83. data/app/models/katello/concerns/content_facet_host_extensions.rb +40 -0
  84. data/app/models/katello/concerns/host_managed_extensions.rb +28 -2
  85. data/app/models/katello/concerns/hostgroup_extensions.rb +1 -1
  86. data/app/models/katello/concerns/organization_extensions.rb +3 -1
  87. data/app/models/katello/concerns/pulp_database_unit.rb +15 -5
  88. data/app/models/katello/concerns/remote_execution_provider_extensions.rb +9 -0
  89. data/app/models/katello/concerns/setting_extensions.rb +1 -1
  90. data/app/models/katello/concerns/smart_proxy_extensions.rb +4 -3
  91. data/app/models/katello/content_credential.rb +4 -0
  92. data/app/models/katello/content_facet_applicable_deb.rb +7 -0
  93. data/app/models/katello/content_view.rb +24 -1
  94. data/app/models/katello/content_view_component.rb +4 -0
  95. data/app/models/katello/content_view_erratum_filter.rb +2 -0
  96. data/app/models/katello/content_view_filter.rb +1 -1
  97. data/app/models/katello/content_view_package_filter_rule.rb +2 -1
  98. data/app/models/katello/content_view_version.rb +30 -1
  99. data/app/models/katello/deb.rb +71 -0
  100. data/app/models/katello/erratum.rb +13 -1
  101. data/app/models/katello/generic_content_unit.rb +3 -1
  102. data/app/models/katello/glue/pulp/repos.rb +2 -2
  103. data/app/models/katello/host/content_facet.rb +23 -2
  104. data/app/models/katello/host/subscription_facet.rb +1 -1
  105. data/app/models/katello/host_tracer.rb +21 -2
  106. data/app/models/katello/installed_deb.rb +1 -1
  107. data/app/models/katello/module_stream.rb +4 -0
  108. data/app/models/katello/ping.rb +20 -4
  109. data/app/models/katello/product.rb +7 -5
  110. data/app/models/katello/provider.rb +1 -24
  111. data/app/models/katello/repository.rb +37 -10
  112. data/app/models/katello/root_repository.rb +28 -14
  113. data/app/models/setting/content.rb +8 -13
  114. data/app/services/katello/applicability/applicable_content_helper.rb +20 -0
  115. data/app/services/katello/organization_creator.rb +8 -0
  116. data/app/services/katello/pulp3/api/ansible_collection.rb +0 -40
  117. data/app/services/katello/pulp3/api/apt.rb +0 -47
  118. data/app/services/katello/pulp3/api/content_guard.rb +1 -1
  119. data/app/services/katello/pulp3/api/core.rb +28 -23
  120. data/app/services/katello/pulp3/api/docker.rb +0 -50
  121. data/app/services/katello/pulp3/api/file.rb +0 -48
  122. data/app/services/katello/pulp3/api/generic.rb +1 -44
  123. data/app/services/katello/pulp3/api/yum.rb +4 -44
  124. data/app/services/katello/pulp3/generic_content_unit.rb +8 -4
  125. data/app/services/katello/pulp3/repository/ansible_collection.rb +4 -0
  126. data/app/services/katello/pulp3/repository/apt.rb +3 -3
  127. data/app/services/katello/pulp3/repository/generic.rb +10 -65
  128. data/app/services/katello/pulp3/repository/yum.rb +10 -0
  129. data/app/services/katello/pulp3/repository.rb +47 -21
  130. data/app/services/katello/pulp3/repository_mirror.rb +30 -11
  131. data/app/services/katello/pulp3/rpm.rb +2 -32
  132. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +7 -8
  133. data/app/services/katello/pulp3/smart_proxy_repository.rb +1 -1
  134. data/app/services/katello/registration_manager.rb +2 -0
  135. data/app/services/katello/repository_type.rb +103 -15
  136. data/app/services/katello/repository_type_manager.rb +14 -8
  137. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  138. data/app/services/katello/upstream_connection_checker.rb +1 -0
  139. data/app/views/foreman/job_templates/resolve_traces.erb +25 -0
  140. data/app/views/foreman/job_templates/resolve_traces_-_katello_ansible_default.erb +28 -0
  141. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
  142. data/app/views/katello/api/v2/common/_metadata.json.rabl +1 -0
  143. data/app/views/katello/api/v2/content_facet/base.json.rabl +3 -1
  144. data/app/views/katello/api/v2/content_facet/show.json.rabl +2 -1
  145. data/app/views/katello/api/v2/content_view_components/show.json.rabl +4 -0
  146. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +7 -0
  147. data/app/views/katello/api/v2/content_views/base.json.rabl +12 -8
  148. data/app/views/katello/api/v2/content_views/index.json.rabl +1 -0
  149. data/app/views/katello/api/v2/content_views/permissions.rabl +8 -0
  150. data/app/views/katello/api/v2/debs/base.json.rabl +5 -0
  151. data/app/views/katello/api/v2/errata/index.json.rabl +4 -0
  152. data/app/views/katello/api/v2/generic_content_units/base.json.rabl +2 -0
  153. data/app/views/katello/api/v2/generic_content_units/show.json.rabl +7 -0
  154. data/app/views/katello/api/v2/host_tracer/base.json.rabl +1 -0
  155. data/app/views/katello/api/v2/module_streams/index.json.rabl +4 -0
  156. data/app/views/katello/api/v2/organizations/cdn_configuration.rabl +1 -0
  157. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -0
  158. data/app/views/katello/api/v2/repositories/base.json.rabl +10 -17
  159. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +2 -6
  160. data/config/routes/api/v2.rb +13 -0
  161. data/config/routes/overrides.rb +2 -0
  162. data/config/routes.rb +14 -2
  163. data/db/migrate/20140110000001_update_environments_add_katello_id.rb +1 -3
  164. data/db/migrate/20140610154745_content_view_puppet_environment_id.rb +0 -35
  165. data/db/migrate/20190802112101_add_applicable_debs.rb +16 -0
  166. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +2 -2
  167. data/db/migrate/20210909140337_add_last_indexed_to_repos.rb +5 -0
  168. data/db/migrate/20210910190324_move_background_settings_to_immediate.rb +25 -0
  169. data/db/migrate/20211006161617_add_filename_to_katello_generic_content_units.rb +5 -0
  170. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +30 -0
  171. data/db/migrate/20211025181315_add_additional_metadata_to_katello_generic_content_units.rb +5 -0
  172. data/engines/bastion/README.md +15 -0
  173. data/engines/bastion/app/assets/javascripts/bastion/components/nutupane.factory.js +2 -2
  174. data/engines/bastion/config/routes.rb +2 -0
  175. data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +3 -3
  176. data/engines/bastion/vendor/assets/javascripts/bastion/angular-sanitize/angular-sanitize.js +1 -1
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion_katello.js +3 -0
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/registration.html +1 -1
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-applicable.controller.js +44 -0
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs.controller.js +1 -1
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs-applicable.html +70 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs.html +1 -1
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +10 -0
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +5 -0
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +25 -9
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +2 -2
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -9
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +22 -2
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.routes.js +1 -1
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb.controller.js +22 -2
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-content-views.html +1 -1
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +36 -4
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-repositories.html +1 -1
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb.html +4 -4
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/views/debs.html +31 -4
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/generic-content/generic-content.factory.js +21 -0
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/generic-content/generic-content.module.js +17 -0
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package.controller.js +4 -0
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +3 -3
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +6 -2
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +30 -2
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.filter.js +1 -13
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +32 -9
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +15 -4
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +32 -19
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +28 -28
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-generic-content.html +57 -0
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +46 -4
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +57 -27
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.module.js +1 -0
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js +16 -7
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +30 -4
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository.factory.js +2 -1
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +8 -0
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details-info.controller.js +6 -2
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
  217. data/engines/bastion_katello/lib/bastion_katello/engine.rb +1 -1
  218. data/lib/katello/engine.rb +0 -1
  219. data/lib/katello/permission_creator.rb +4 -3
  220. data/lib/katello/permissions/host_permissions.rb +1 -0
  221. data/lib/katello/permissions/organization_permissions.rb +2 -1
  222. data/lib/katello/plugin.rb +15 -11
  223. data/lib/katello/repository_types/ansible_collection.rb +13 -1
  224. data/lib/katello/repository_types/deb.rb +13 -0
  225. data/lib/katello/repository_types/docker.rb +13 -1
  226. data/lib/katello/repository_types/file.rb +13 -0
  227. data/lib/katello/repository_types/ostree.rb +48 -4
  228. data/lib/katello/repository_types/python.rb +26 -12
  229. data/lib/katello/repository_types/yum.rb +16 -1
  230. data/lib/katello/tasks/repository.rake +3 -12
  231. data/lib/katello/tasks/reset.rake +4 -5
  232. data/lib/katello/version.rb +1 -1
  233. data/package.json +3 -2
  234. data/webpack/__mocks__/react-intl/index.js +4 -0
  235. data/webpack/components/ActionableDetail.js +23 -3
  236. data/webpack/components/AddedStatusLabel.js +1 -1
  237. data/webpack/components/Bookmark/AddBookmarkModal.js +96 -0
  238. data/webpack/components/Bookmark/Bookmark.scss +28 -0
  239. data/webpack/components/Bookmark/BookmarkActions.js +24 -0
  240. data/webpack/components/Bookmark/BookmarkConstants.js +3 -0
  241. data/webpack/components/Bookmark/BookmarkSelectors.js +15 -0
  242. data/webpack/components/Bookmark/index.js +94 -0
  243. data/webpack/components/EditableSwitch.js +6 -1
  244. data/webpack/components/EditableTextInput/EditableTextInput.js +41 -13
  245. data/webpack/components/Errata/index.js +69 -0
  246. data/webpack/components/ErratumTypeLabel.js +31 -0
  247. data/webpack/components/Loading.js +5 -2
  248. data/webpack/components/RoutedTabs/__tests__/RoutedTabs.test.js +5 -11
  249. data/webpack/components/RoutedTabs/index.js +77 -2
  250. data/webpack/components/Search/Search.js +67 -80
  251. data/webpack/components/Search/__tests__/search.test.js +8 -26
  252. data/webpack/components/SelectAllCheckbox/SelectAllCheckbox.scss +3 -0
  253. data/webpack/components/SelectAllCheckbox/index.js +126 -0
  254. data/webpack/components/SelectableDropdown/SelectableDropdown.js +7 -2
  255. data/webpack/components/Table/EmptyStateMessage.js +38 -17
  256. data/webpack/components/Table/MainTable.js +49 -10
  257. data/webpack/components/Table/MainTable.scss +11 -0
  258. data/webpack/components/Table/PageControls.js +45 -0
  259. data/webpack/components/Table/TableHooks.js +230 -0
  260. data/webpack/components/Table/TableWrapper.js +221 -50
  261. data/webpack/components/Table/helpers.js +17 -0
  262. data/webpack/components/TypeAhead/TypeAhead.js +74 -58
  263. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +25 -10
  264. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.scss +9 -8
  265. data/webpack/components/TypeAhead/pf4Search/TypeAheadItems.js +2 -2
  266. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +32 -22
  267. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +101 -0
  268. data/webpack/components/extensions/HostDetails/Cards/__tests__/contentViewDetailsCard.test.js +53 -0
  269. data/webpack/components/extensions/HostDetails/HostErrata/HostErrataActions.js +47 -0
  270. data/webpack/components/extensions/HostDetails/HostErrata/HostErrataConstants.js +32 -0
  271. data/webpack/components/extensions/HostDetails/HostErrata/HostErrataSelectors.js +16 -0
  272. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/EmptyPage.js +19 -0
  273. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +17 -0
  274. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +7 -0
  275. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/helpers.js +3 -0
  276. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +40 -0
  277. data/webpack/components/extensions/HostDetails/Tabs/EnableTracerEmptyState.js +42 -0
  278. data/webpack/components/extensions/HostDetails/Tabs/EnableTracerModal.js +118 -0
  279. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.js +347 -0
  280. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.scss +16 -0
  281. data/webpack/components/extensions/HostDetails/Tabs/ErratumExpansionContents.js +60 -0
  282. data/webpack/components/extensions/HostDetails/Tabs/ErratumExpansionDetail.js +69 -0
  283. data/webpack/components/extensions/HostDetails/Tabs/HostTracesActions.js +19 -0
  284. data/webpack/components/extensions/HostDetails/Tabs/HostTracesConstants.js +2 -0
  285. data/webpack/components/extensions/HostDetails/Tabs/HostTracesSelectors.js +19 -0
  286. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +56 -0
  287. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +5 -0
  288. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.js +188 -0
  289. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.scss +12 -0
  290. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errata.fixtures.json +67 -0
  291. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +785 -0
  292. data/webpack/components/extensions/HostDetails/Tabs/__tests__/resolveTraces.fixtures.json +35 -0
  293. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracerEmptyTraceResults.fixtures.json +7 -0
  294. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracerEnableJobInvocation.fixtures.json +35 -0
  295. data/webpack/components/extensions/HostDetails/Tabs/__tests__/traces.fixtures.json +44 -0
  296. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +386 -0
  297. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +20 -0
  298. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  299. data/webpack/components/extensions/RegistrationCommands/index.js +1 -1
  300. data/webpack/components/pf3Table/components/Table.js +1 -1
  301. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +3 -3
  302. data/webpack/containers/Application/Routes.js +3 -3
  303. data/webpack/containers/Application/config.js +21 -6
  304. data/webpack/containers/Application/overrides.scss +34 -3
  305. data/webpack/{fills_index.js → global_index.js} +11 -2
  306. data/webpack/global_test_setup.js +6 -1
  307. data/webpack/redux/actions/RedHatRepositories/helpers.js +4 -4
  308. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +1 -1
  309. data/webpack/scenes/Content/ContentActions.js +31 -0
  310. data/webpack/scenes/Content/ContentConfig.js +138 -0
  311. data/webpack/scenes/Content/ContentConstants.js +7 -0
  312. data/webpack/scenes/Content/ContentPage.js +89 -0
  313. data/webpack/scenes/Content/ContentSelectors.js +43 -0
  314. data/webpack/scenes/Content/Details/ContentCounts.js +42 -0
  315. data/webpack/scenes/Content/Details/ContentDetails.js +66 -0
  316. data/webpack/scenes/Content/Details/ContentInfo.js +60 -0
  317. data/webpack/scenes/Content/Details/ContentRepositories.js +78 -0
  318. data/webpack/scenes/Content/Details/__tests__/ansibleCollectionDetails.fixtures.json +20 -0
  319. data/webpack/scenes/Content/Details/__tests__/ansibleCollectionRepositoryDetails.fixtures.json +71 -0
  320. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +152 -0
  321. data/webpack/scenes/Content/Details/__tests__/pythonPackageDetails.fixtures.json +20 -0
  322. data/webpack/scenes/Content/Details/__tests__/pythonPackageRepositoryDetails.fixtures.json +71 -0
  323. data/webpack/scenes/Content/Details/index.js +4 -0
  324. data/webpack/scenes/Content/Table/ContentTable.js +90 -0
  325. data/webpack/scenes/Content/Table/index.js +3 -0
  326. data/webpack/scenes/Content/__tests__/ansibleCollections.fixtures.json +50 -0
  327. data/webpack/scenes/Content/__tests__/contentTable.test.js +89 -0
  328. data/webpack/scenes/Content/__tests__/contentTypes.fixtures.json +66 -0
  329. data/webpack/scenes/Content/__tests__/pythonPackages.fixtures.json +30 -0
  330. data/webpack/scenes/Content/index.js +4 -0
  331. data/webpack/scenes/ContentViews/ContentViewSelectors.js +5 -6
  332. data/webpack/scenes/ContentViews/ContentViewsActions.js +13 -8
  333. data/webpack/scenes/ContentViews/ContentViewsConstants.js +31 -4
  334. data/webpack/scenes/ContentViews/ContentViewsPage.js +4 -0
  335. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +19 -7
  336. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +7 -5
  337. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +1 -1
  338. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +7 -3
  339. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +1 -2
  340. data/webpack/scenes/ContentViews/Delete/CVDeleteContext.js +4 -0
  341. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +170 -0
  342. data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +108 -0
  343. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionFinish.js +69 -0
  344. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +121 -0
  345. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +120 -0
  346. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReview.js +62 -0
  347. data/webpack/scenes/ContentViews/Delete/Steps/CVEnvironmentSelectionForm.scss +4 -0
  348. data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +259 -0
  349. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +155 -0
  350. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +241 -0
  351. data/webpack/scenes/ContentViews/Delete/__tests__/cvDetails.fixtures.json +248 -0
  352. data/webpack/scenes/ContentViews/Delete/__tests__/cvVersionsData.fixtures.json +865 -0
  353. data/webpack/scenes/ContentViews/Delete/__tests__/envPathData.fixtures.json +424 -0
  354. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +15 -7
  355. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +123 -0
  356. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +1 -1
  357. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentVersion.js +8 -5
  358. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +109 -51
  359. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.fixtures.json +21 -6
  360. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +80 -16
  361. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +248 -3
  362. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +141 -0
  363. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +36 -54
  364. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +20 -4
  365. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +63 -38
  366. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +3 -4
  367. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +65 -0
  368. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +260 -0
  369. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +54 -0
  370. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +202 -0
  371. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +291 -0
  372. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +441 -0
  373. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +62 -3
  374. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +302 -0
  375. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +186 -23
  376. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +144 -19
  377. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +2 -0
  378. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +44 -13
  379. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +81 -17
  380. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +43 -43
  381. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +96 -0
  382. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContent.fixtures.json +166 -0
  383. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +90 -0
  384. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentSearch.fixtures.json +33 -0
  385. data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +91 -0
  386. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +237 -0
  387. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.fixtures.json +42 -0
  388. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +265 -0
  389. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +218 -11
  390. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +517 -0
  391. data/webpack/scenes/ContentViews/Details/Filters/__tests__/allFilterErrata.fixtures.json +122 -0
  392. data/webpack/scenes/ContentViews/Details/Filters/__tests__/allFilterModulesStreams.fixtures.json +60 -0
  393. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewErrataByDateDetails.fixtures.json +359 -0
  394. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetail.fixtures.json +88 -102
  395. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +34 -9
  396. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +148 -132
  397. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +25 -7
  398. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvAllRepos.fixtures.json +150 -0
  399. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +74 -0
  400. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +404 -0
  401. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErratumFilterDetails.fixtures.json +89 -0
  402. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailModuleAffectedRepos.fixtures.json +383 -0
  403. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailWithAffectedRepos.fixtures.json +375 -0
  404. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterFixutre.fixture.json +282 -0
  405. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +392 -0
  406. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilterDetails.fixtures.json +97 -0
  407. data/webpack/scenes/ContentViews/Details/Filters/index.js +26 -0
  408. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +68 -79
  409. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  410. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +163 -0
  411. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromoteSelectors.js +16 -0
  412. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +9 -1
  413. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +88 -74
  414. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +8 -9
  415. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.fixtures.json +3 -3
  416. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +30 -9
  417. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionEnvironments.js +1 -1
  418. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.js +9 -5
  419. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.scss +2 -2
  420. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +132 -14
  421. data/webpack/scenes/ContentViews/Details/Versions/Delete/DeleteContext.js +4 -0
  422. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +176 -0
  423. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +127 -0
  424. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +131 -0
  425. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +128 -0
  426. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js +94 -0
  427. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +67 -0
  428. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedActivationKeys.fixture.json +53 -0
  429. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +153 -0
  430. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvDropDownOptionsResponse.fixture.json +192 -0
  431. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +313 -0
  432. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemoveResponse.fixture.json +74 -0
  433. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionRemoveEnvPaths.fixtures.json +352 -0
  434. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionsResponseData.fixtures.json +583 -0
  435. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +96 -0
  436. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +97 -0
  437. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +332 -0
  438. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +128 -0
  439. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +44 -0
  440. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +66 -0
  441. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +125 -0
  442. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +115 -0
  443. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionAnsibleCollections.fixtures.json +449 -0
  444. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionComponent.fixtures.json +753 -0
  445. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDebPackages.fixtures.json +58 -0
  446. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +158 -0
  447. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +289 -0
  448. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsCounts.fixtures.json +73 -0
  449. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +44 -0
  450. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDockerTags.fixtures.json +3024 -0
  451. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionErrata.fixtures.json +201 -0
  452. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionFiles.fixtures.json +22 -0
  453. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionModuleStreams.fixtures.json +196 -0
  454. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRepositories.fixtures.json +1000 -0
  455. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRpmPackageGroups.fixtures.json +44 -0
  456. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRpmPackages.fixtures.json +394 -0
  457. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.fixtures.json +4 -4
  458. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +95 -26
  459. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionsWithTask.fixtures.json +2 -2
  460. data/webpack/scenes/ContentViews/Details/Versions/index.js +25 -0
  461. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +20 -16
  462. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +3 -5
  463. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +106 -64
  464. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +25 -4
  465. data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +1 -1
  466. data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +4 -1
  467. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +29 -36
  468. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +10 -0
  469. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +117 -0
  470. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +59 -0
  471. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +4 -3
  472. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +30 -11
  473. data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +1 -1
  474. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +38 -1
  475. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +79 -0
  476. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +107 -0
  477. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +59 -0
  478. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsResponse.fixtures.json +116 -0
  479. data/webpack/scenes/ContentViews/expansions/__tests__/relatedCompositeCvs.fixtures.json +4 -0
  480. data/webpack/scenes/ContentViews/helpers.js +1 -0
  481. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/RepositorySetRepository.js +1 -1
  482. data/webpack/scenes/RedHatRepositories/components/SearchBar.js +4 -3
  483. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +1 -1
  484. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +17 -9
  485. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +3 -3
  486. data/webpack/test-utils/nockWrapper.js +20 -3
  487. data/webpack/utils/helpers.js +16 -2
  488. data/webpack/utils/useDebounce.js +20 -0
  489. metadata +232 -54
  490. data/app/assets/javascripts/katello/widgets/tabs.js +0 -13
  491. data/app/assets/stylesheets/katello/widgets/tabs.scss +0 -69
  492. data/app/lib/actions/katello/provider/update.rb +0 -38
  493. data/webpack/components/RoutedTabs/RoutedTabs.js +0 -90
  494. data/webpack/components/Search/Search.test.js +0 -23
  495. data/webpack/components/Search/__snapshots__/Search.test.js.snap +0 -21
  496. data/webpack/components/extensions/HostDetails/Tabs/ContentTab.js +0 -42
  497. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +0 -145
  498. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionPackages.js +0 -0
@@ -3,6 +3,12 @@ module Katello
3
3
  include Katello::Concerns::FilteredAutoCompleteSearch
4
4
  include Katello::Concerns::Api::V2::HostErrataExtensions
5
5
 
6
+ TYPES_FROM_PARAMS = {
7
+ bugfix: Katello::Erratum::BUGZILLA, # ['bugfix', 'recommended']
8
+ security: Katello::Erratum::SECURITY, # ['security']
9
+ enhancement: Katello::Erratum::ENHANCEMENT # ['enhancement', 'optional']
10
+ }.freeze
11
+
6
12
  before_action :find_host, only: :index
7
13
  before_action :find_host_editable, except: :index
8
14
  before_action :find_errata_ids, only: :apply
@@ -35,11 +41,12 @@ module Katello
35
41
  param :host_id, :number, :desc => N_("UUID of the content host"), :required => true
36
42
  param :content_view_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Content View"), :required => false
37
43
  param :environment_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Environment"), :required => false
44
+ param :include_applicable, :bool, :desc => N_("Return errata that are applicable to this host. Defaults to false)"), :required => false
45
+ param :type, String, :desc => N_("Return only errata of a particular type (security, bugfix, enhancement)"), :required => false
46
+ param :severity, String, :desc => N_("Return only errata of a particular severity (None, Low, Moderate, Important, Critical)"), :required => false
38
47
  param_group :search, Api::V2::ApiController
39
48
  def index
40
- if (params[:content_view_id] && params[:environment_id].nil?) || (params[:environment_id] && params[:content_view_id].nil?)
41
- fail _("Either both parameters 'content_view_id' and 'environment_id' should be specified or neither should be specified")
42
- end
49
+ validate_index_params!
43
50
 
44
51
  collection = scoped_search(index_relation, 'updated', 'desc', :resource_class => Erratum, :includes => [:cves])
45
52
 
@@ -79,22 +86,44 @@ module Katello
79
86
 
80
87
  protected
81
88
 
89
+ def total_selectable(query)
90
+ if ::Foreman::Cast.to_bool(params[:include_applicable])
91
+ query.where(:id => @host.content_facet.installable_errata).count
92
+ else
93
+ query.count
94
+ end
95
+ end
96
+
82
97
  def index_relation
83
98
  relation = Katello::Erratum.none
84
99
  if @host.content_facet
85
100
  relation = @host.content_facet.installable_errata(@environment, @content_view)
86
101
  end
102
+ if params[:type].present?
103
+ relation = relation.where(:errata_type => TYPES_FROM_PARAMS[params[:type].to_sym])
104
+ end
105
+ if params[:severity].present?
106
+ relation = relation.where(:severity => params[:severity])
107
+ end
87
108
  relation
88
109
  end
89
110
 
90
111
  private
91
112
 
92
113
  def find_content_view
93
- @content_view = ContentView.readable.find(params[:content_view_id]) if params[:content_view_id]
114
+ @content_view = if ::Foreman::Cast.to_bool(params[:include_applicable])
115
+ @host.organization.default_content_view
116
+ elsif params[:content_view_id]
117
+ ContentView.readable.find(params[:content_view_id])
118
+ end
94
119
  end
95
120
 
96
121
  def find_environment
97
- @environment = KTEnvironment.readable.find(params[:environment_id]) if params[:environment_id]
122
+ @environment = if ::Foreman::Cast.to_bool(params[:include_applicable])
123
+ @host.organization.library
124
+ elsif params[:environment_id]
125
+ KTEnvironment.readable.find(params[:environment_id])
126
+ end
98
127
  end
99
128
 
100
129
  def find_host
@@ -118,5 +147,17 @@ module Katello
118
147
  @errata_ids = find_bulk_errata_ids([@host], params[:bulk_errata_ids])
119
148
  end
120
149
  end
150
+
151
+ def validate_index_params!
152
+ if (params[:content_view_id] && params[:environment_id].nil?) || (params[:environment_id] && params[:content_view_id].nil?)
153
+ fail _("Either both parameters 'content_view_id' and 'environment_id' should be specified or neither should be specified")
154
+ end
155
+ if params[:type].present?
156
+ fail _("Type must be one of: %s" % TYPES_FROM_PARAMS.keys.join(', ')) unless TYPES_FROM_PARAMS.key?(params[:type].to_sym)
157
+ end
158
+ if params[:severity].present?
159
+ fail _("Severity must be one of: %s") % Katello::Erratum::SEVERITIES.join(', ') unless Katello::Erratum::SEVERITIES.include?(params[:severity])
160
+ end
161
+ end
121
162
  end
122
163
  end
@@ -1,5 +1,6 @@
1
1
  module Katello
2
2
  class Api::V2::HostTracerController < Api::V2::ApiController
3
+ include Katello::Concerns::FilteredAutoCompleteSearch
3
4
  before_action :find_host
4
5
 
5
6
  resource_description do
@@ -14,7 +15,7 @@ module Katello
14
15
  respond_for_index(:collection => collection)
15
16
  end
16
17
 
17
- api :PUT, "/hosts/:host_id/traces/resolve", N_("Resolve Traces")
18
+ api :PUT, "/hosts/:host_id/traces/resolve", N_("Resolve traces")
18
19
  param :host_id, :number, :required => true, :desc => N_("ID of the host")
19
20
  param :trace_ids, Array, :required => true, :desc => N_("Array of Trace IDs")
20
21
  def resolve
@@ -35,6 +35,10 @@ module Katello
35
35
  %w(name asc)
36
36
  end
37
37
 
38
+ def all_for_content_view_filter(filter, _collection)
39
+ ModuleStream.joins(:repositories).merge(filter.applicable_repos)
40
+ end
41
+
38
42
  def available_for_content_view_filter(filter, _collection)
39
43
  collection_ids = []
40
44
  current_ids = filter.module_stream_rules.map(&:module_stream_id)
@@ -6,7 +6,7 @@ module Katello
6
6
  include ForemanTasks::Triggers
7
7
 
8
8
  before_action :local_find_taxonomy, :only => %w(repo_discover cancel_repo_discover
9
- download_debug_certificate
9
+ download_debug_certificate cdn_configuration
10
10
  redhat_provider update releases)
11
11
 
12
12
  resource_description do
@@ -55,12 +55,11 @@ module Katello
55
55
 
56
56
  api :PUT, '/organizations/:id', N_('Update organization')
57
57
  param :id, :number, :desc => N_("organization ID"), :required => true
58
- param :redhat_repository_url, String, :desc => N_("Red Hat CDN URL")
58
+ param :redhat_repository_url, String, :desc => N_("Red Hat CDN URL"), deprecated: true
59
59
  param_group :resource
60
60
  def update
61
- if params.key?(:redhat_repository_url)
62
- org_params = params.permit(:redhat_repository_url).to_h
63
- sync_task(::Actions::Katello::Provider::Update, @organization.redhat_provider, org_params)
61
+ if params[:redhat_repository_url]
62
+ sync_task(::Actions::Katello::CdnConfiguration::Update, @organization.cdn_configuration, url: params[:redhat_repository_url])
64
63
  end
65
64
  super
66
65
  end
@@ -133,7 +132,23 @@ module Katello
133
132
  respond_for_index :collection => response
134
133
  end
135
134
 
136
- api :GET, '/organizations/:id/redhat_provider', N_('List all :resource_id')
135
+ api :PUT, "/organizations/:id/cdn_configuration", N_("Update the CDN configuration")
136
+ param :id, String, :desc => N_("ID of the Organization"), :required => true
137
+ param :ssl_ca_credential_id, Integer, :desc => N_("Content Credential to use for SSL CA")
138
+ param :username, String, :desc => N_("Username for authentication")
139
+ param :password, String, :desc => N_("Password for authentication")
140
+ param :upstream_organization_label, String, :desc => N_("Upstream organization to sync CDN content from")
141
+ param :url, String, :desc => N_("Upstream server to sync CDN content from")
142
+ def cdn_configuration
143
+ config_keys = [:url, :username, :password, :upstream_organization_label, :ssl_ca_credential_id]
144
+ config_params = params.slice(*config_keys).permit!.to_h
145
+
146
+ task = sync_task(::Actions::Katello::CdnConfiguration::Update, @organization.cdn_configuration, config_params)
147
+
148
+ respond_for_async :resource => task
149
+ end
150
+
151
+ api :GET, '/organizations/:id/redhat_provider', N_('List all :resource_id'), deprecated: true
137
152
  def redhat_provider
138
153
  respond_for_show(:resource => @organization.redhat_provider,
139
154
  :resource_name => "providers")
@@ -142,7 +157,7 @@ module Katello
142
157
  protected
143
158
 
144
159
  def action_permission
145
- if %w(download_debug_certificate redhat_provider repo_discover
160
+ if %w(download_debug_certificate redhat_provider repo_discover cdn_configuration
146
161
  cancel_repo_discover).include?(params[:action])
147
162
  :edit
148
163
  elsif params[:action] == "releases"
@@ -35,7 +35,7 @@ module Katello
35
35
  syncable_roots = RootRepository.where(:product_id => syncable_products).has_url
36
36
 
37
37
  syncable_roots = syncable_roots.yum_type if skip_metadata_check || validate_contents
38
- syncable_roots = syncable_roots.where.not(:download_policy => ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND) if validate_contents
38
+ syncable_roots = syncable_roots.where.not(:download_policy => ::Katello::RootRepository::DOWNLOAD_ON_DEMAND) if validate_contents
39
39
 
40
40
  syncable_repositories = Katello::Repository.where(:root_id => syncable_roots).in_default_view
41
41
  fail _("No syncable repositories found for selected products and options.") if syncable_roots.empty?
@@ -27,6 +27,7 @@ module Katello
27
27
  before_action :find_content, :only => :remove_content
28
28
  before_action :find_organization_from_repo, :only => [:update]
29
29
  before_action :error_on_rh_product, :only => [:create]
30
+ before_action :check_import_parameters, :only => [:import_uploads]
30
31
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_GPG_KEY_TYPE }
31
32
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CA_CERT_TYPE }
32
33
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CLIENT_CERT_TYPE }
@@ -57,8 +58,6 @@ module Katello
57
58
  param :upstream_username, String, :desc => N_("Username of the upstream repository user used for authentication")
58
59
  param :upstream_password, String, :desc => N_("Password of the upstream repository user used for authentication")
59
60
  param :upstream_authentication_token, String, :desc => N_("Password of the upstream authentication token.")
60
- param :ostree_upstream_sync_policy, ::Katello::RootRepository::OSTREE_UPSTREAM_SYNC_POLICIES, :desc => N_("policies for syncing upstream ostree repositories")
61
- param :ostree_upstream_sync_depth, :number, :desc => N_("if a custom sync policy is chosen for ostree repositories then a 'depth' value must be provided")
62
61
  param :deb_releases, String, :desc => N_("whitespace-separated list of releases to be synced from deb-archive")
63
62
  param :deb_components, String, :desc => N_("whitespace-separated list of repo components to be synced from deb-archive")
64
63
  param :deb_architectures, String, :desc => N_("whitespace-separated list of architectures to be synced from deb-archive")
@@ -98,7 +97,6 @@ module Katello
98
97
  param :rpm_id, String, :desc => N_("Id of a rpm package to find repositories that contain the rpm")
99
98
  param :file_id, String, :desc => N_("Id of a file to find repositories that contain the file")
100
99
  param :ansible_collection_id, String, :desc => N_("Id of an ansible collection to find repositories that contain the ansible collection")
101
- param :ostree_branch_id, String, :desc => N_("Id of an ostree branch to find repositories that contain that branch")
102
100
  param :library, :bool, :desc => N_("show repositories in Library and the default content view")
103
101
  param :archived, :bool, :desc => N_("show archived repositories")
104
102
  param :content_type, RepositoryTypeManager.defined_repository_types.keys, :desc => N_("limit to only repositories of this type")
@@ -108,7 +106,7 @@ module Katello
108
106
  param :available_for, String, :desc => N_("interpret specified object to return only Repositories that can be associated with specified object. Only 'content_view' & 'content_view_version' are supported."),
109
107
  :required => false
110
108
  param :with_content, RepositoryTypeManager.enabled_content_types(false), :desc => N_("only repositories having at least one of the specified content type ex: rpm , erratum")
111
- param :download_policy, ::Runcible::Models::YumImporter::DOWNLOAD_POLICIES, :desc => N_("limit to only repositories with this download policy")
109
+ param :download_policy, ::Katello::RootRepository::DOWNLOAD_POLICIES, :desc => N_("limit to only repositories with this download policy")
112
110
  param :username, String, :desc => N_("only show the repositories readable by this user with this username")
113
111
  param_group :search, Api::V2::ApiController
114
112
  add_scoped_search_description_for(Repository)
@@ -214,9 +212,10 @@ module Katello
214
212
  .where("#{AnsibleCollection.table_name}.id" => AnsibleCollection.with_identifiers(params[:ansible_collection_id]))
215
213
  end
216
214
 
217
- if params[:ostree_branch_id]
218
- query = query.joins(:ostree_branches)
219
- .where("#{OstreeBranch.table_name}.id" => OstreeBranch.with_identifiers(params[:ostree_branch_id]))
215
+ generic_type_param = RepositoryTypeManager.generic_content_types.find { |type| params["#{type}_id".to_sym] }
216
+ if generic_type_param
217
+ query = query.joins(:generic_content_units)
218
+ .where("#{GenericContentUnit.table_name}.id" => GenericContentUnit.with_identifiers(params["#{generic_type_param}_id".to_sym]))
220
219
  end
221
220
 
222
221
  query
@@ -265,8 +264,12 @@ module Katello
265
264
 
266
265
  api :PUT, "/repositories/:id/republish", N_("Forces a republish of the specified repository, regenerating metadata and symlinks on the filesystem.")
267
266
  param :id, :number, :desc => N_("Repository identifier"), :required => true
267
+ param :force, :bool, :desc => N_("Force metadata regeneration to proceed. Dangerous when repositories use mirror on sync."), :required => true
268
268
  def republish
269
- task = async_task(::Actions::Katello::Repository::MetadataGenerate, @repository, :force => true)
269
+ unless ::Foreman::Cast.to_bool(params[:force])
270
+ fail HttpErrors::BadRequest, _('Metadata republishing must be forced because it is a dangerous operation.')
271
+ end
272
+ task = async_task(::Actions::Katello::Repository::MetadataGenerate, @repository)
270
273
  respond_for_async :resource => task
271
274
  end
272
275
 
@@ -336,8 +339,10 @@ module Katello
336
339
 
337
340
  api :DELETE, "/repositories/:id", N_("Destroy a custom repository")
338
341
  param :id, :number, :required => true
342
+ param :remove_from_content_view_versions, :bool, :required => false, :desc => N_("Force delete the repository by removing it from all content view versions")
339
343
  def destroy
340
- sync_task(::Actions::Katello::Repository::Destroy, @repository)
344
+ sync_task(::Actions::Katello::Repository::Destroy, @repository,
345
+ remove_from_content_view_versions: ::Foreman::Cast.to_bool(params.fetch(:remove_from_content_view_versions, false)))
341
346
  respond_for_destroy
342
347
  end
343
348
 
@@ -388,7 +393,7 @@ module Katello
388
393
  param :async, :bool, desc: N_("Do not wait for the ImportUpload action to finish. Default: false")
389
394
  param 'publish_repository', :bool, :desc => N_("Whether or not to regenerate the repository on disk. Default: true")
390
395
  param 'sync_capsule', :bool, :desc => N_("Whether or not to sync an external capsule after upload. Default: true")
391
- param :content_type, RepositoryTypeManager.uploadable_content_types(false).map(&:label), :required => false, :desc => N_("content type ('deb', 'docker_manifest', 'file', 'ostree', 'rpm', 'srpm')")
396
+ param :content_type, RepositoryTypeManager.uploadable_content_types(false).map(&:label), :required => false, :desc => N_("content type ('deb', 'docker_manifest', 'file', 'ostree_ref', 'rpm', 'srpm')")
392
397
  param :uploads, Array, :desc => N_("Array of uploads to import") do
393
398
  param 'id', String, :required => true
394
399
  param 'content_unit_id', String
@@ -397,6 +402,12 @@ module Katello
397
402
  param 'name', String, :desc => N_("Needs to only be set for file repositories or docker tags")
398
403
  param 'digest', String, :desc => N_("Needs to only be set for docker tags")
399
404
  end
405
+ Katello::RepositoryTypeManager.generic_repository_types.each_pair do |_, repo_type|
406
+ repo_type.import_attributes.each do |import_attribute|
407
+ param import_attribute.api_param, import_attribute.type,
408
+ :desc => N_(import_attribute.description)
409
+ end
410
+ end
400
411
  def import_uploads
401
412
  generate_metadata = ::Foreman::Cast.to_bool(params.fetch(:publish_repository, true))
402
413
  sync_capsule = ::Foreman::Cast.to_bool(params.fetch(:sync_capsule, true))
@@ -432,6 +443,11 @@ module Katello
432
443
  end
433
444
  end
434
445
 
446
+ api :GET, "/content_types", N_("Return the enabled content types")
447
+ def content_types
448
+ render :json => Katello::RepositoryTypeManager.enabled_content_types.map { |type| Katello::RepositoryTypeManager.find_content_type(type) }
449
+ end
450
+
435
451
  protected
436
452
 
437
453
  def find_product
@@ -465,11 +481,9 @@ module Katello
465
481
  def repository_params
466
482
  keys = [:download_policy, :mirror_on_sync, :arch, :verify_ssl_on_sync, :upstream_password,
467
483
  :upstream_username, :download_concurrency, :upstream_authentication_token,
468
- :ostree_upstream_sync_depth, :ostree_upstream_sync_policy, {:os_versions => []},
469
- :deb_releases, :deb_components, :deb_architectures, :description, :http_proxy_policy,
470
- :http_proxy_id, :retain_package_versions_count, {:ignorable_content => []}
484
+ {:os_versions => []}, :deb_releases, :deb_components, :deb_architectures, :description,
485
+ :http_proxy_policy, :http_proxy_id, :retain_package_versions_count, {:ignorable_content => []}
471
486
  ]
472
-
473
487
  keys += [{:docker_tags_whitelist => []}, :docker_upstream_name] if params[:action] == 'create' || @repository&.docker?
474
488
  keys += [:ansible_collection_requirements, :ansible_collection_auth_url, :ansible_collection_auth_token] if params[:action] == 'create' || @repository&.ansible_collection?
475
489
  keys += [:label, :content_type] if params[:action] == "create"
@@ -503,7 +517,6 @@ module Katello
503
517
  end
504
518
 
505
519
  # rubocop:disable Metrics/PerceivedComplexity
506
- # rubocop:disable Metrics/MethodLength
507
520
  def construct_repo_from_params(repo_params) # rubocop:disable Metrics/AbcSize
508
521
  root = @product.add_repo(repo_params.slice(:label, :name, :description, :url, :content_type, :arch, :unprotected,
509
522
  :gpg_key, :ssl_ca_cert, :ssl_client_cert, :ssl_client_key,
@@ -526,10 +539,6 @@ module Katello
526
539
  root.generic_remote_options = generic_remote_options.to_json
527
540
  end
528
541
 
529
- if root.ostree?
530
- root.ostree_upstream_sync_policy = repo_params[:ostree_upstream_sync_policy]
531
- root.ostree_upstream_sync_depth = repo_params[:ostree_upstream_sync_depth]
532
- end
533
542
  if root.deb?
534
543
  root.deb_releases = repo_params[:deb_releases] if repo_params[:deb_releases]
535
544
  root.deb_components = repo_params[:deb_components] if repo_params[:deb_components]
@@ -607,5 +616,13 @@ module Katello
607
616
  end
608
617
  generic_remote_options
609
618
  end
619
+
620
+ def check_import_parameters
621
+ @repository.repository_type&.import_attributes&.each do |import_attribute|
622
+ if import_attribute.required && params[import_attribute.api_param].blank?
623
+ fail HttpErrors::UnprocessableEntity, _("%s is required", import_attributes.api_param)
624
+ end
625
+ end
626
+ end
610
627
  end
611
628
  end
@@ -94,7 +94,6 @@ module Katello
94
94
  api :POST, "/organizations/:organization_id/subscriptions/upload", N_("Upload a subscription manifest")
95
95
  param :organization_id, :number, :desc => N_("Organization id"), :required => true
96
96
  param :content, File, :desc => N_("Subscription manifest file"), :required => true
97
- param :repository_url, String, :desc => N_("repository url"), :required => false
98
97
  def upload
99
98
  fail HttpErrors::BadRequest, _("No manifest file uploaded") if params[:content].blank?
100
99
 
@@ -106,12 +105,6 @@ module Katello
106
105
  temp_file.close
107
106
  end
108
107
 
109
- # repository url
110
- if (repo_url = params[:repository_url])
111
- @provider.repository_url = repo_url
112
- @provider.save!
113
- end
114
-
115
108
  task = async_task(::Actions::Katello::Organization::ManifestImport, @organization, File.expand_path(temp_file.path), params[:force])
116
109
  respond_for_async :resource => task
117
110
  end
@@ -159,7 +152,6 @@ module Katello
159
152
  def find_provider
160
153
  @organization = @activation_key.organization if @activation_key
161
154
  @organization = @subscription.organization if @subscription
162
- @provider = @organization.redhat_provider if @organization
163
155
  end
164
156
 
165
157
  private
@@ -27,7 +27,11 @@ module Katello
27
27
  page = index_params[:page] || 1
28
28
 
29
29
  collection = scoped_search_results(
30
- pools[:pools], pools[:subtotal], pools[:total], page, index_params[:per_page], nil)
30
+ query: pools[:pools],
31
+ subtotal: pools[:subtotal],
32
+ total: pools[:total],
33
+ page: page,
34
+ per_page: index_params[:per_page])
31
35
  respond(collection: collection)
32
36
  end
33
37
 
@@ -0,0 +1,40 @@
1
+ module Katello
2
+ module Concerns
3
+ module Api::V2::BulkExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ def find_bulk_items(bulk_params:, model_scope:, key: :id)
7
+ if bulk_params.is_a?(String)
8
+ bulk_params = ActiveSupport::JSON.decode(bulk_params).
9
+ deep_symbolize_keys
10
+ end
11
+
12
+ bulk_params[:included] ||= {}
13
+ bulk_params[:excluded] ||= {}
14
+
15
+ if (!bulk_params[:all]) &&
16
+ bulk_params[:included][:ids].blank? &&
17
+ bulk_params[:included][:search].blank?
18
+ fail HttpErrors::BadRequest, _("No items have been specified.")
19
+ end
20
+
21
+ if bulk_params[:all] && !bulk_params[:included][:ids].blank?
22
+ fail HttpErrors::BadRequest, _("Sending a list of included IDs is not allowed when all items are being selected.")
23
+ end
24
+
25
+ items = model_scope
26
+ if bulk_params[:included][:ids]
27
+ items = model_scope.where(key => bulk_params[:included][:ids])
28
+ elsif bulk_params[:included][:search]
29
+ items = model_scope.search_for(bulk_params[:included][:search])
30
+ end
31
+
32
+ if bulk_params[:excluded][:ids]
33
+ items = items.where.not(key => bulk_params[:excluded][:ids])
34
+ end
35
+
36
+ items
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,39 +1,12 @@
1
1
  module Katello
2
2
  module Concerns
3
3
  module Api::V2::HostErrataExtensions
4
- extend ActiveSupport::Concern
4
+ include Api::V2::BulkExtensions
5
5
 
6
6
  def find_bulk_errata_ids(hosts, bulk_errata_ids)
7
- bulk_params = ActiveSupport::JSON.decode(bulk_errata_ids).deep_symbolize_keys
8
- bulk_params[:included] ||= {}
9
- bulk_params[:excluded] ||= {}
10
-
11
- if bulk_params[:included][:ids].blank? && bulk_params[:included][:search].nil?
12
- fail HttpErrors::BadRequest, _("No errata has been specified.")
13
- end
14
-
15
- #works on a structure of param_group bulk_params and transforms it into a list of errata_ids
16
- errata = ::Katello::Erratum.installable_for_hosts(hosts)
17
-
18
- if bulk_params[:included][:ids]
19
- errata = errata.where(:errata_id => bulk_params[:included][:ids])
20
- end
21
-
22
- if bulk_params[:included][:search]
23
- search_errata = ::Katello::Erratum.installable_for_hosts(hosts)
24
- search_errata = search_errata.search_for(bulk_params[:included][:search])
25
-
26
- if errata.any?
27
- errata = errata.merge(search_errata)
28
- else
29
- errata = search_errata
30
- end
31
- end
32
-
33
- if bulk_params[:excluded][:ids].present?
34
- errata = errata.where.not(errata_id: bulk_params[:excluded][:ids])
35
- end
36
-
7
+ errata = find_bulk_items(bulk_params: bulk_errata_ids,
8
+ model_scope: ::Katello::Erratum.installable_for_hosts(hosts),
9
+ key: :errata_id)
37
10
  errata.pluck(:errata_id)
38
11
  end
39
12
  end
@@ -35,7 +35,7 @@ module Katello
35
35
 
36
36
  def smart_proxy
37
37
  @smart_proxy ||= begin
38
- proxy = params[:url] ? SmartProxy.find_by(url: params[:url]) : SmartProxy.pulp_primary
38
+ proxy = params[:url] ? SmartProxy.unscoped.find_by(url: params[:url]) : SmartProxy.pulp_primary
39
39
 
40
40
  fail Foreman::Exception, _('Smart proxy content source not found!') unless proxy
41
41
  fail Foreman::Exception, _('Pulp 3 is not enabled on Smart proxy!') unless proxy.pulp3_enabled?
@@ -44,7 +44,7 @@ module Katello
44
44
  respond :resource => @resource
45
45
  end
46
46
 
47
- api :GET, "/:resource_id/compare/", N_("List :resource_id")
47
+ api :GET, "/:resource_id/compare/", N_("List :resource")
48
48
  param :content_view_version_ids, Array, :desc => N_("content view versions to compare")
49
49
  param :repository_id, :number, :desc => N_("Library repository id to restrict comparisons to")
50
50
  def compare
@@ -29,15 +29,11 @@ module Katello
29
29
  policies = [
30
30
  {
31
31
  :name => _("On Demand"),
32
- :label => ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND
33
- },
34
- {
35
- :name => _("Background"),
36
- :label => ::Runcible::Models::YumImporter::DOWNLOAD_BACKGROUND
32
+ :label => ::Katello::RootRepository::DOWNLOAD_ON_DEMAND
37
33
  },
38
34
  {
39
35
  :name => _("Immediate"),
40
- :label => ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE
36
+ :label => ::Katello::RootRepository::DOWNLOAD_IMMEDIATE
41
37
  },
42
38
  {
43
39
  :name => _("Inherit from Repository"),
@@ -2,7 +2,7 @@ module Katello
2
2
  module KatelloUrlHelper
3
3
  unless defined? CONSTANTS_DEFINED
4
4
  FILEPREFIX = ['file'].freeze
5
- PROTOCOLS = ['http', 'https', 'ftp'].freeze
5
+ PROTOCOLS = ['http', 'https', 'ftp', 'uln'].freeze
6
6
 
7
7
  CONSTANTS_DEFINED = true
8
8
  end
@@ -26,15 +26,18 @@ module Actions
26
26
  end
27
27
 
28
28
  def done?
29
+ check_for_errors!(external_task)
29
30
  !::Katello::Resources::Candlepin::Job.not_finished?(external_task)
30
31
  end
31
32
 
32
33
  private
33
34
 
35
+ def job_poll_params
36
+ {}
37
+ end
38
+
34
39
  def poll_external_task
35
- task = ::Katello::Resources::Candlepin::Job.get(external_task[:id])
36
- check_for_errors!(task)
37
- task
40
+ ::Katello::Resources::Candlepin::Job.get(external_task[:id], job_poll_params)
38
41
  end
39
42
 
40
43
  def check_for_errors!(task)
@@ -6,16 +6,20 @@ module Actions
6
6
  param :task_id
7
7
  end
8
8
 
9
- def poll_external_task(task_id = external_task[:id])
10
- task = ::Katello::Resources::Candlepin::Job.get(task_id, :result_data => true)
11
- unless ::Katello::Resources::Candlepin::Job.not_finished?(task)
12
- output[:hypervisors] = ::Actions::Katello::Host::Hypervisors.parse_hypervisors(task.delete('resultData'))
13
- end
14
- task
9
+ def invoke_external_task
10
+ self.external_task = { :id => input[:task_id] }
11
+ poll_external_task
15
12
  end
16
13
 
17
- def invoke_external_task
18
- poll_external_task(input[:task_id])
14
+ def on_finish
15
+ super
16
+ output[:hypervisors] = ::Actions::Katello::Host::Hypervisors.parse_hypervisors(external_task.delete('resultData'))
17
+ end
18
+
19
+ private
20
+
21
+ def job_poll_params
22
+ {:result_data => true}
19
23
  end
20
24
  end
21
25
  end
@@ -26,8 +26,17 @@ module Actions
26
26
  :link
27
27
  end
28
28
 
29
+ def hostname(host_id)
30
+ content_facet = ::Katello::Host::ContentFacet.find_by_host_id(host_id)
31
+ content_facet&.host&.name
32
+ end
33
+
29
34
  def humanized_name
30
- _("Bulk generate applicability for hosts")
35
+ if input[:host_ids]&.length == 1
36
+ _("Bulk generate applicability for host %s" % hostname(input[:host_ids].first))
37
+ else
38
+ _("Bulk generate applicability for hosts")
39
+ end
31
40
  end
32
41
  end
33
42
  end
@@ -4,7 +4,7 @@ module Actions
4
4
  class SyncCapsule < ::Actions::EntryAction
5
5
  include Actions::Katello::PulpSelector
6
6
  def plan(smart_proxy, options = {})
7
- plan_self(:smart_proxy_id => smart_proxy.id, :options => options)
7
+ plan_self(:smart_proxy_id => smart_proxy.id)
8
8
  action_subject(smart_proxy)
9
9
  environment = options[:environment]
10
10
  content_view = options[:content_view]
@@ -29,7 +29,7 @@ module Actions
29
29
  repo_batch.each do |repo|
30
30
  if repo.is_a?(::Katello::Repository) &&
31
31
  repo.distribution_bootable? &&
32
- repo.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND
32
+ repo.download_policy == ::Katello::RootRepository::DOWNLOAD_ON_DEMAND
33
33
  plan_action(Katello::Repository::FetchPxeFiles,
34
34
  id: repo.id,
35
35
  capsule_id: smart_proxy.id)
@@ -64,7 +64,7 @@ module Actions
64
64
  end
65
65
 
66
66
  def run
67
- smart_proxy = ::SmartProxy.find(input[:smart_proxy_id])
67
+ smart_proxy = ::SmartProxy.unscoped.find(input[:smart_proxy_id])
68
68
  smart_proxy.sync_container_gateway
69
69
  end
70
70