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
@@ -36,9 +36,9 @@ module Katello
36
36
  end
37
37
  end
38
38
 
39
- def self.api(smart_proxy)
40
- api_class = RepositoryTypeManager.find_by(:pulp3_service_class, self).pulp3_api_class
41
- api_class ? api_class.new(smart_proxy) : Katello::Pulp3::Api::Core.new(smart_proxy)
39
+ def self.api(smart_proxy, repository_type_label)
40
+ repo_type = RepositoryTypeManager.enabled_repository_types[repository_type_label]
41
+ repo_type.pulp3_api(smart_proxy)
42
42
  end
43
43
 
44
44
  def core_api
@@ -46,12 +46,12 @@ module Katello
46
46
  end
47
47
 
48
48
  def api
49
- @api ||= self.class.api(smart_proxy)
49
+ @api ||= self.class.api(smart_proxy, repo.content_type)
50
50
  end
51
51
 
52
52
  def ignore_404_exception(*)
53
53
  yield
54
- rescue api.class.api_exception_class => e
54
+ rescue api.api_exception_class => e
55
55
  raise e unless e.code == 404
56
56
  nil
57
57
  end
@@ -61,7 +61,7 @@ module Katello
61
61
  end
62
62
 
63
63
  def repair(repository_version_href)
64
- data = api.class.repository_version_class.new
64
+ data = api.repository_version_class.new
65
65
  api.repository_versions_api.repair(repository_version_href, data)
66
66
  end
67
67
 
@@ -74,9 +74,17 @@ module Katello
74
74
  end
75
75
 
76
76
  def create_remote
77
- remote_file_data = api.class.remote_class.new(remote_options)
77
+ if remote_options[:url]&.start_with?('uln')
78
+ remote_file_data = api.class.remote_uln_class.new(remote_options)
79
+ else
80
+ remote_file_data = api.remote_class.new(remote_options)
81
+ end
78
82
  reformat_api_exception do
79
- response = api.remotes_api.create(remote_file_data)
83
+ if remote_options[:url]&.start_with?('uln')
84
+ response = api.remotes_uln_api.create(remote_file_data)
85
+ else
86
+ response = api.remotes_api.create(remote_file_data)
87
+ end
80
88
  repo.update!(:remote_href => response.pulp_href)
81
89
  end
82
90
  end
@@ -89,10 +97,18 @@ module Katello
89
97
  def create_test_remote
90
98
  test_remote_options = remote_options
91
99
  test_remote_options[:name] = test_remote_name
92
- remote_file_data = api.class.remote_class.new(test_remote_options)
100
+ if remote_options[:url]&.start_with?('uln')
101
+ remote_file_data = api.class.remote_uln_class.new(test_remote_options)
102
+ else
103
+ remote_file_data = api.remote_class.new(test_remote_options)
104
+ end
93
105
 
94
106
  reformat_api_exception do
95
- response = api.remotes_api.create(remote_file_data)
107
+ if remote_options[:url]&.start_with?('uln')
108
+ response = api.remotes_uln_api.create(remote_file_data)
109
+ else
110
+ response = api.remotes_api.create(remote_file_data)
111
+ end
96
112
  #delete is async, but if its not properly deleted, orphan cleanup will take care of it later
97
113
  delete_remote(response.pulp_href)
98
114
  end
@@ -104,7 +120,7 @@ module Katello
104
120
 
105
121
  def reformat_api_exception
106
122
  yield
107
- rescue api.class.client_module::ApiError => exception
123
+ rescue api.client_module::ApiError => exception
108
124
  body = JSON.parse(exception.response_body) rescue body
109
125
  body = body.values.join(',') if body.respond_to?(:values)
110
126
  raise ::Katello::Errors::Pulp3Error, body
@@ -128,11 +144,15 @@ module Katello
128
144
  end
129
145
 
130
146
  def remote_partial_update
131
- api.remotes_api.partial_update(repo.remote_href, remote_options)
147
+ if remote_options[:url]&.start_with?('uln')
148
+ api.remotes_uln_api.partial_update(repo.remote_href, remote_options)
149
+ else
150
+ api.remotes_api.partial_update(repo.remote_href, remote_options)
151
+ end
132
152
  end
133
153
 
134
154
  def delete_remote(href = repo.remote_href)
135
- ignore_404_exception { api.remotes_api.delete(href) } if href
155
+ ignore_404_exception { remote_options[:url]&.start_with?('uln') ? api.remotes_uln_api.delete(href) : api.remotes_api.delete(href) } if href
136
156
  end
137
157
 
138
158
  def self.instance_for_type(repo, smart_proxy)
@@ -175,7 +195,7 @@ module Katello
175
195
  end
176
196
 
177
197
  def get_remote(href = repo.remote_href)
178
- api.remotes_api.read(href)
198
+ repo.url&.start_with?('uln') ? api.remotes_uln_api.read(href) : api.remotes_api.read(href)
179
199
  end
180
200
 
181
201
  def get_distribution(href = distribution_reference.href)
@@ -231,7 +251,7 @@ module Katello
231
251
  end
232
252
 
233
253
  def sync(options = {})
234
- repository_sync_url_data = api.class.repository_sync_url_class.new(sync_url_params(options))
254
+ repository_sync_url_data = api.repository_sync_url_class.new(sync_url_params(options))
235
255
  [api.repositories_api.sync(repository_reference.repository_href, repository_sync_url_data)]
236
256
  end
237
257
 
@@ -242,7 +262,7 @@ module Katello
242
262
  end
243
263
 
244
264
  def create_publication
245
- publication_data = api.class.publication_class.new(publication_options(repo.version_href))
265
+ publication_data = api.publication_class.new(publication_options(repo.version_href))
246
266
  api.publications_api.create(publication_data)
247
267
  end
248
268
 
@@ -276,7 +296,7 @@ module Katello
276
296
  # Since we got this far, we need to create a new distribution
277
297
  begin
278
298
  create_distribution(relative_path)
279
- rescue api.class.client_module::ApiError => e
299
+ rescue api.client_module::ApiError => e
280
300
  # Now it seems there is a distribution. Fetch it and save the reference.
281
301
  if e.message.include?("\"base_path\":[\"This field must be unique.\"]") ||
282
302
  e.message.include?("\"base_path\":[\"Overlaps with existing distribution\"")
@@ -290,7 +310,7 @@ module Katello
290
310
  end
291
311
 
292
312
  def create_distribution(path)
293
- distribution_data = api.class.distribution_class.new(secure_distribution_options(path))
313
+ distribution_data = api.distribution_class.new(secure_distribution_options(path))
294
314
  api.distributions_api.create(distribution_data)
295
315
  end
296
316
 
@@ -413,12 +433,18 @@ module Katello
413
433
  end
414
434
 
415
435
  def ssl_remote_options
416
- if root.redhat? && Katello::Resources::CDN::CdnResource.redhat_cdn?(root.url)
436
+ if root.redhat? && root.cdn_configuration.redhat?
417
437
  {
418
438
  client_cert: root.product.certificate,
419
439
  client_key: root.product.key,
420
440
  ca_cert: Katello::Repository.feed_ca_cert(root.url)
421
441
  }
442
+ elsif root.redhat? && !root.cdn_configuration.redhat?
443
+ {
444
+ client_cert: root.cdn_configuration.ssl_cert,
445
+ client_key: root.cdn_configuration.ssl_key,
446
+ ca_cert: root.cdn_configuration.ssl_ca
447
+ }
422
448
  elsif root.custom?
423
449
  {
424
450
  client_cert: root.ssl_client_cert&.content,
@@ -432,14 +458,14 @@ module Katello
432
458
 
433
459
  def lookup_version(href)
434
460
  api.repository_versions_api.read(href) if href
435
- rescue api.class.api_exception_class => e
461
+ rescue api.api_exception_class => e
436
462
  Rails.logger.error "Exception when calling repository_versions_api->read: #{e}"
437
463
  nil
438
464
  end
439
465
 
440
466
  def lookup_publication(href)
441
467
  api.publications_api.read(href) if href
442
- rescue api.class.api_exception_class => e
468
+ rescue api.api_exception_class => e
443
469
  Rails.logger.error "Exception when calling publications_api->read: #{e}"
444
470
  nil
445
471
  end
@@ -24,7 +24,11 @@ module Katello
24
24
  def refresh_entities
25
25
  href = remote_href
26
26
  if href
27
- [api.remotes_api.partial_update(href, remote_options)]
27
+ if remote_options[:url]&.start_with?('uln')
28
+ [api.remotes_uln_api.partial_update(href, remote_options)]
29
+ else
30
+ [api.remotes_api.partial_update(href, remote_options)]
31
+ end
28
32
  else
29
33
  create_remote
30
34
  []
@@ -57,7 +61,7 @@ module Katello
57
61
 
58
62
  def delete(href = repository_href)
59
63
  api.repositories_api.delete(href) if href
60
- rescue api.class.api_exception_class => e
64
+ rescue api.api_exception_class => e
61
65
  raise e if e.code != 404
62
66
  nil
63
67
  end
@@ -74,6 +78,10 @@ module Katello
74
78
  fetch_repository.latest_version_href
75
79
  end
76
80
 
81
+ def publication_href
82
+ api.publications_api.list(:repository_version => version_href).results.first.pulp_href
83
+ end
84
+
77
85
  def create_version(options = {})
78
86
  api.repository_versions_api.create(repository_href, options)
79
87
  end
@@ -99,8 +107,13 @@ module Katello
99
107
  end
100
108
 
101
109
  def create_remote
102
- remote_file_data = @repo_service.api.class.remote_class.new(remote_options)
103
- api.remotes_api.create(remote_file_data)
110
+ if remote_options[:url]&.start_with?('uln')
111
+ remote_file_data = @repo_service.api.class.remote_uln_class.new(remote_options)
112
+ api.remotes_uln_api.create(remote_file_data)
113
+ else
114
+ remote_file_data = @repo_service.api.remote_class.new(remote_options)
115
+ api.remotes_api.create(remote_file_data)
116
+ end
104
117
  end
105
118
 
106
119
  def compute_remote_options
@@ -115,7 +128,7 @@ module Katello
115
128
  sync_params = repo_service.sync_url_params(options)
116
129
  sync_params[:remote] = remote_href
117
130
  sync_params[:mirror] = true
118
- repository_sync_url_data = api.class.repository_sync_url_class.new(sync_params)
131
+ repository_sync_url_data = api.repository_sync_url_class.new(sync_params)
119
132
  [api.repositories_api.sync(repository_href, repository_sync_url_data)]
120
133
  end
121
134
 
@@ -153,16 +166,22 @@ module Katello
153
166
 
154
167
  def create_publication
155
168
  if (href = version_href)
156
- publication_data = api.class.publication_class.new(publication_options(href))
169
+ publication_data = api.publication_class.new(publication_options(href))
157
170
  api.publications_api.create(publication_data)
158
171
  end
159
172
  end
160
173
 
161
- def refresh_distributions(options = {})
174
+ def refresh_distributions(_options = {})
162
175
  path = repo_service.relative_path
163
176
  dist_params = {}
164
- dist_params[:publication] = options[:publication] if options[:publication]
165
- dist_params[:repository_version] = version_href if options[:use_repository_version]
177
+ if repo_service.repo.repository_type.pulp3_skip_publication
178
+ dist_params[:repository_version] = version_href
179
+ fail "could not lookup a version_href for repo #{repo_service.repo.id}" if version_href.nil?
180
+ else
181
+ dist_params[:publication] = publication_href
182
+ fail "Could not lookup a publication_href for repo #{repo_service.repo.id}" if publication_href.nil?
183
+ end
184
+
166
185
  dist_options = distribution_options(path, dist_params)
167
186
  dist_options.delete(:content_guard) if repo_service.repo.content_type == "docker"
168
187
  if (distro = repo_service.lookup_distributions(base_path: path).first) ||
@@ -172,7 +191,7 @@ module Katello
172
191
  api.distributions_api.partial_update(distro.pulp_href, dist_options)
173
192
  else
174
193
  # create dist
175
- distribution_data = api.class.distribution_class.new(dist_options)
194
+ distribution_data = api.distribution_class.new(dist_options)
176
195
  api.distributions_api.create(distribution_data)
177
196
  end
178
197
  end
@@ -184,7 +203,7 @@ module Katello
184
203
  end
185
204
 
186
205
  def create_distribution(path)
187
- distribution_data = api.class.distribution_class.new(distribution_options(path))
206
+ distribution_data = api.distribution_class.new(distribution_options(path))
188
207
  repo_service.distributions_api.create(distribution_data)
189
208
  end
190
209
  end
@@ -26,41 +26,11 @@ module Katello
26
26
  end
27
27
 
28
28
  def requires
29
- results = []
30
- flags = {'GT' => '>', 'LT' => '>', 'EQ' => '=', 'GE' => '>=', 'LE' => '<='}
31
-
32
- backend_data['requires']&.each do |requirement|
33
- requires_str = ""
34
- if requirement.count < 3
35
- requires_str = requirement.first
36
- results << requires_str
37
- else
38
- requirement[1] = flags[requirement[1]]
39
- requirement[0...2].each { |requirement_piece| requires_str += "#{requirement_piece} " }
40
- requirement[2...-1].each { |requirement_piece| requires_str += "#{requirement_piece}." }
41
- results << requires_str[0...-1]
42
- end
43
- end
44
- results.uniq
29
+ Util::Package.parse_dependencies(backend_data['requires'])
45
30
  end
46
31
 
47
32
  def provides
48
- results = []
49
- flags = {'GT' => '>', 'LT' => '>', 'EQ' => '=', 'GE' => '>=', 'LE' => '<='}
50
-
51
- backend_data['provides']&.each do |provided|
52
- provides_str = ""
53
- if provided.count < 3
54
- provides_str = provided.first
55
- results << provides_str
56
- else
57
- provided[1] = flags[provided[1]]
58
- provided[0...2].each { |provided_piece| provides_str += "#{provided_piece} " }
59
- provided[2...-1].each { |provided_piece| provides_str += "#{provided_piece}." }
60
- results << provides_str[0...-1]
61
- end
62
- end
63
- results.uniq
33
+ Util::Package.parse_dependencies(backend_data['provides'])
64
34
  end
65
35
 
66
36
  def files
@@ -12,7 +12,7 @@ module Katello
12
12
  smart_proxy_helper = ::Katello::SmartProxyHelper.new(smart_proxy)
13
13
  katello_pulp_ids = smart_proxy_helper.combined_repos_available_to_capsule.map(&:pulp_id)
14
14
  pulp3_enabled_repo_types.each do |repo_type|
15
- api = repo_type.pulp3_service_class.api(smart_proxy)
15
+ api = repo_type.pulp3_api(smart_proxy)
16
16
  repo_map[api] = api.list_all.reject { |capsule_repo| katello_pulp_ids.include? capsule_repo.name }
17
17
  end
18
18
 
@@ -23,7 +23,7 @@ module Katello
23
23
  repo_version_map = {}
24
24
 
25
25
  pulp3_enabled_repo_types.each do |repo_type|
26
- api = repo_type.pulp3_service_class.api(smart_proxy)
26
+ api = repo_type.pulp3_api(smart_proxy)
27
27
  version_hrefs = api.repository_versions
28
28
  orphan_version_hrefs = api.list_all.collect do |pulp_repo|
29
29
  mirror_repo_versions = api.versions_list_for_repository(pulp_repo.pulp_href, ordering: :_created)
@@ -52,16 +52,15 @@ module Katello
52
52
  def delete_orphan_distributions
53
53
  tasks = []
54
54
  pulp3_enabled_repo_types.each do |repo_type|
55
- pulp3_class = repo_type.pulp3_service_class
56
- orphan_distributions(pulp3_class).each do |distribution|
57
- tasks << pulp3_class.api(smart_proxy).delete_distribution(distribution.pulp_href)
55
+ orphan_distributions(repo_type).each do |distribution|
56
+ tasks << repo_type.pulp3_api(smart_proxy).delete_distribution(distribution.pulp_href)
58
57
  end
59
58
  end
60
59
  tasks
61
60
  end
62
61
 
63
- def orphan_distributions(pulp3_service_class)
64
- api = pulp3_service_class.api(smart_proxy)
62
+ def orphan_distributions(repo_type)
63
+ api = repo_type.pulp3_api(smart_proxy)
65
64
  api.distributions_list_all.select do |distribution|
66
65
  dist = api.get_distribution(distribution.pulp_href)
67
66
  self.class.orphan_distribution?(dist)
@@ -78,7 +77,7 @@ module Katello
78
77
  tasks = []
79
78
  repo_names = Katello::Repository.pluck(:pulp_id)
80
79
  pulp3_enabled_repo_types.each do |repo_type|
81
- api = repo_type.pulp3_service_class.api(smart_proxy)
80
+ api = repo_type.pulp3_api(smart_proxy)
82
81
  remotes = api.remotes_list
83
82
 
84
83
  remotes.each do |remote|
@@ -26,7 +26,7 @@ module Katello
26
26
  katello_repos = katello_repos.in_content_views([content_view_id]) if content_view_id
27
27
  katello_repos = katello_repos.select { |repo| smart_proxy.pulp3_support?(repo) }
28
28
  repos_on_capsule = pulp3_enabled_repo_types.collect do |repo_type|
29
- repo_type.pulp3_service_class.api(smart_proxy).list_all(name_in: katello_repos.map(&:pulp_id))
29
+ repo_type.pulp3_api(smart_proxy).list_all(name_in: katello_repos.map(&:pulp_id))
30
30
  end
31
31
  repos_on_capsule.flatten!
32
32
  repo_ids = repos_on_capsule.map(&:name)
@@ -262,6 +262,8 @@ module Katello
262
262
  end
263
263
 
264
264
  def delete_agent_queue(host)
265
+ return unless ::Katello.with_katello_agent?
266
+
265
267
  queue_name = Katello::Agent::Dispatcher.host_queue_name(host)
266
268
  Katello::EventQueue.push_event(::Katello::Events::DeleteHostAgentQueue::EVENT_TYPE, host.id) do |attrs|
267
269
  attrs[:metadata] = { queue_name: queue_name }
@@ -13,13 +13,14 @@ module Katello
13
13
  end
14
14
 
15
15
  def_field :allow_creation_by_user, :service_class, :pulp3_service_class, :pulp3_plugin,
16
- :pulp3_skip_publication, :configuration_class, :partial_repo_path, :pulp3_api_class,
16
+ :pulp3_skip_publication, :configuration_class, :pulp3_api_class,
17
17
  :repositories_api_class, :api_class, :remotes_api_class, :repository_versions_api_class,
18
18
  :distributions_api_class, :remote_class, :repo_sync_url_class, :client_module_class,
19
- :distribution_class, :publication_class, :publications_api_class, :model_name, :model_version
19
+ :distribution_class, :publication_class, :publications_api_class, :url_description
20
20
 
21
21
  attr_accessor :metadata_publish_matching_check, :index_additional_data_proc
22
22
  attr_reader :id, :unique_content_per_repo
23
+ attr_writer :url_description
23
24
 
24
25
  def initialize(id)
25
26
  @id = id.to_sym
@@ -27,6 +28,7 @@ module Katello
27
28
  @unique_content_per_repo = false
28
29
  @content_types = []
29
30
  @generic_remote_options = []
31
+ @import_attributes = []
30
32
  end
31
33
 
32
34
  def set_unique_content_per_repo
@@ -41,6 +43,33 @@ module Katello
41
43
  @generic_remote_options.sort_by(&:name)
42
44
  end
43
45
 
46
+ def import_attributes
47
+ @import_attributes.sort_by(&:name)
48
+ end
49
+
50
+ def primary_content_types
51
+ found = self.content_types.select { |type| type.primary_content }
52
+ found = self.content_types if found.empty?
53
+ found
54
+ end
55
+
56
+ def translated_generic_remote_options
57
+ translated = generic_remote_options.deep_dup
58
+ translated.map do |option|
59
+ option.title = _(option.title)
60
+ option.description = _(option.description)
61
+ end
62
+ translated
63
+ end
64
+
65
+ def translated_import_attributes
66
+ translated = import_attributes.deep_dup
67
+ translated.map do |option|
68
+ option.description = _(option.description)
69
+ end
70
+ translated
71
+ end
72
+
44
73
  def content_types_to_index
45
74
  if SmartProxy.pulp_primary&.pulp3_repository_type_support?(self)
46
75
  # type.index being false supersedes type.index_on_pulp3 being true
@@ -60,7 +89,7 @@ module Katello
60
89
 
61
90
  def content_type(model_class, options = {})
62
91
  @content_types ||= []
63
- @content_types << ContentType.new(options.merge(:model_class => model_class))
92
+ @content_types << ContentType.new(options.merge(:model_class => model_class, :content_type => model_class::CONTENT_TYPE))
64
93
  end
65
94
 
66
95
  def generic_content_type(content_type, options = {})
@@ -73,6 +102,10 @@ module Katello
73
102
  @generic_remote_options << GenericRemoteOption.new(options.merge(:name => name))
74
103
  end
75
104
 
105
+ def import_attribute(name, options = {})
106
+ @import_attributes << GenericImportAttribute.new(options.merge(:name => name))
107
+ end
108
+
76
109
  def prevent_unneeded_metadata_publish
77
110
  self.metadata_publish_matching_check = true
78
111
  end
@@ -90,23 +123,33 @@ module Katello
90
123
  :name => self.id.to_s,
91
124
  :id => self.id,
92
125
  :creatable => @allow_creation_by_user,
93
- :pulp3_support => SmartProxy.pulp_primary.pulp3_repository_type_support?(self)
126
+ :pulp3_support => SmartProxy.pulp_primary.pulp3_repository_type_support?(self),
127
+ :generic_remote_options => translated_generic_remote_options,
128
+ :import_attributes => translated_import_attributes,
129
+ :url_description => _(@url_description),
130
+ :content_types => content_types.as_json
94
131
  }
95
132
  end
96
133
 
134
+ def inspect
135
+ "RepositoryType[#{self.id}]"
136
+ end
137
+
97
138
  def pulp3_api(smart_proxy)
98
139
  if pulp3_api_class == Katello::Pulp3::Api::Generic
99
140
  pulp3_api_class.new(smart_proxy, self)
100
141
  else
101
- pulp3_api_class ? pulp3_api_class.new(smart_proxy) : Katello::Pulp3::Api::Core.new(smart_proxy)
142
+ pulp3_api_class ? pulp3_api_class.new(smart_proxy, self) : Katello::Pulp3::Api::Core.new(smart_proxy)
102
143
  end
103
144
  end
104
145
 
105
146
  class ContentType
106
- attr_accessor :model_class, :priority, :pulp2_service_class, :pulp3_service_class, :index, :uploadable, :removable, :index_on_pulp3
147
+ attr_accessor :model_class, :priority, :pulp2_service_class, :pulp3_service_class, :index, :uploadable, :removable,
148
+ :primary_content, :index_on_pulp3, :generic_browser, :content_type
107
149
 
108
150
  def initialize(options)
109
151
  self.model_class = options[:model_class]
152
+ self.content_type = options[:content_type]
110
153
  self.priority = options[:priority] || 99
111
154
  self.pulp2_service_class = options[:pulp2_service_class]
112
155
  self.pulp3_service_class = options[:pulp3_service_class]
@@ -114,43 +157,88 @@ module Katello
114
157
  self.index_on_pulp3 = options[:index_on_pulp3].nil? ? true : options[:index_on_pulp3]
115
158
  self.uploadable = options[:uploadable] || false
116
159
  self.removable = options[:removable] || false
160
+ self.primary_content = options[:primary_content] || false
161
+ self.generic_browser = options[:generic_browser]
117
162
  end
118
163
 
119
164
  def label
120
165
  self.model_class::CONTENT_TYPE
121
166
  end
167
+
168
+ def as_json(_options = {})
169
+ {
170
+ label: label,
171
+ generic_browser: generic_browser,
172
+ generic: false,
173
+ removable: removable
174
+ }
175
+ end
122
176
  end
123
177
 
124
178
  class GenericContentType < ContentType
125
- attr_accessor :pulp3_api, :pulp3_model, :content_type, :filename_key, :duplicates_allowed
179
+ attr_accessor :pulp3_api, :pulp3_model, :filename_key, :duplicates_allowed, :pluralized_name,
180
+ :model_name, :model_version, :model_filename, :model_additional_metadata
126
181
 
127
182
  def initialize(options)
128
- self.model_class = options[:model_class]
129
- self.priority = options[:priority] || 99
130
- self.pulp3_service_class = options[:pulp3_service_class]
131
- self.index = options[:index].nil? ? true : options[:index]
132
- self.index_on_pulp3 = options[:index_on_pulp3].nil? ? true : options[:index_on_pulp3]
133
- self.uploadable = options[:uploadable] || false
134
- self.removable = options[:removable] || false
183
+ super
135
184
  self.pulp3_api = options[:pulp3_api]
136
185
  self.pulp3_model = options[:pulp3_model]
137
186
  self.content_type = options[:content_type]
138
187
  self.filename_key = options[:filename_key]
139
188
  self.duplicates_allowed = options[:duplicates_allowed]
189
+ self.pluralized_name = options[:pluralized_name]
190
+ self.model_name = options[:model_name]
191
+ self.model_version = options[:model_version]
192
+ self.model_filename = options[:model_filename]
193
+ self.model_additional_metadata = options[:model_additional_metadata]
140
194
  end
141
195
 
142
196
  def label
143
197
  self.content_type
144
198
  end
199
+
200
+ def details_columns
201
+ columns = []
202
+ columns << "Name" if self.model_name
203
+ columns << "Version" if self.model_version
204
+ columns << "Filename" if self.model_filename
205
+ columns
206
+ end
207
+
208
+ def as_json(_options = {})
209
+ super.merge(
210
+ {
211
+ :generic => true,
212
+ :pluralized_label => content_type.pluralize,
213
+ :pluralized_name => pluralized_name,
214
+ :details_columns => details_columns
215
+ }
216
+ )
217
+ end
145
218
  end
146
219
 
147
220
  class GenericRemoteOption
148
- attr_accessor :name, :type, :description
221
+ attr_accessor :name, :title, :type, :description, :input_type, :delimiter
222
+
223
+ def initialize(options)
224
+ self.name = options[:name]
225
+ self.title = options[:title]
226
+ self.type = options[:type]
227
+ self.description = options[:description]
228
+ self.input_type = options[:input_type]
229
+ self.delimiter = options[:delimiter]
230
+ end
231
+ end
232
+
233
+ class GenericImportAttribute
234
+ attr_accessor :name, :api_param, :type, :description, :required
149
235
 
150
236
  def initialize(options)
151
237
  self.name = options[:name]
238
+ self.api_param = options[:api_param]
152
239
  self.type = options[:type]
153
240
  self.description = options[:description]
241
+ self.required = options[:required]
154
242
  end
155
243
  end
156
244
  end
@@ -63,7 +63,7 @@ module Katello
63
63
  def enabled_content_types(enabled_only = true)
64
64
  repo_types = enabled_only ? enabled_repository_types : defined_repository_types
65
65
  list = repo_types.values.map do |type|
66
- type.content_types.map(&:model_class).flatten.map { |ct| ct::CONTENT_TYPE }
66
+ type.content_types.map(&:label).flatten
67
67
  end
68
68
  list.flatten
69
69
  end
@@ -83,6 +83,14 @@ module Katello
83
83
  list.flatten.map(&:content_type)
84
84
  end
85
85
 
86
+ def generic_ui_content_types(enabled_only = true)
87
+ repo_types = enabled_only ? enabled_repository_types : defined_repository_types
88
+ list = repo_types.values.map do |type|
89
+ type.content_types.select { |ct| ct.generic_browser }
90
+ end
91
+ list.flatten.map(&:content_type)
92
+ end
93
+
86
94
  def generic_content_type?(content_type, enabled_only = true)
87
95
  types = generic_content_types(enabled_only)
88
96
  types.include?(content_type)
@@ -128,12 +136,7 @@ module Katello
128
136
  end
129
137
 
130
138
  def find_repository_type(katello_label)
131
- enabled_repository_types.values.each do |repo_type|
132
- repo_type.content_types.each do |content_type|
133
- return repo_type if content_type.label == katello_label.to_s
134
- end
135
- end
136
- nil
139
+ enabled_repository_types[katello_label]
137
140
  end
138
141
 
139
142
  def find_content_type(katello_label)
@@ -171,15 +174,18 @@ module Katello
171
174
 
172
175
  def generic_remote_options(opts = {})
173
176
  options = []
177
+ sorted_options = {}
174
178
  repo_types = opts[:defined_only] ? defined_repository_types : enabled_repository_types
175
179
  repo_types.each do |_, type|
176
180
  if opts[:content_type]
177
181
  (options << type.generic_remote_options).flatten! if type.pulp3_service_class == Katello::Pulp3::Repository::Generic && type.id.to_s == opts[:content_type]
182
+ elsif opts[:sort_by_repo_type]
183
+ sorted_options[type.id] = type.generic_remote_options if type.pulp3_service_class == Katello::Pulp3::Repository::Generic
178
184
  else
179
185
  (options << type.generic_remote_options).flatten! if type.pulp3_service_class == Katello::Pulp3::Repository::Generic
180
186
  end
181
187
  end
182
- options
188
+ opts[:sort_by_repo_type] ? sorted_options : options
183
189
  end
184
190
 
185
191
  private
@@ -67,7 +67,7 @@ module Katello
67
67
  end
68
68
 
69
69
  def self.redhat_connected?(org)
70
- org.redhat_provider.repository_url.include?(CDN_HOSTNAME)
70
+ org.cdn_configuration.url.include?(CDN_HOSTNAME)
71
71
  end
72
72
  end
73
73
  end