katello 3.18.0.rc1 → 4.0.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 (345) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
  4. data/app/controllers/katello/api/v2/api_controller.rb +1 -2
  5. data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +88 -0
  9. data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
  10. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +16 -7
  11. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +57 -92
  12. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -3
  13. data/app/controllers/katello/api/v2/host_debs_controller.rb +1 -0
  14. data/app/controllers/katello/api/v2/host_errata_controller.rb +2 -2
  15. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
  16. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +20 -7
  17. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
  18. data/app/controllers/katello/api/v2/products_controller.rb +9 -9
  19. data/app/controllers/katello/api/v2/repositories_controller.rb +5 -19
  20. data/app/controllers/katello/api/v2/repository_sets_controller.rb +24 -14
  21. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
  22. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  23. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
  24. data/app/controllers/katello/concerns/api/v2/authorization.rb +10 -0
  25. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +22 -18
  26. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
  27. data/app/controllers/katello/concerns/registration_controller_extensions.rb +16 -0
  28. data/app/helpers/katello/sync_management_helper.rb +0 -2
  29. data/app/lib/actions/candlepin/environment/create.rb +1 -1
  30. data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
  31. data/app/lib/actions/helpers/smart_proxy_sync_history_helper.rb +24 -0
  32. data/app/lib/actions/katello/activation_key/create.rb +9 -11
  33. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
  34. data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
  35. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +31 -8
  36. data/app/lib/actions/katello/check_matching_content.rb +17 -0
  37. data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
  38. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
  39. data/app/lib/actions/katello/content_view/publish.rb +6 -5
  40. data/app/lib/actions/katello/content_view_version/import.rb +5 -11
  41. data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
  42. data/app/lib/actions/katello/content_view_version/incremental_update.rb +30 -10
  43. data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
  44. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -1
  45. data/app/lib/actions/katello/host/upload_package_profile.rb +3 -1
  46. data/app/lib/actions/katello/host/upload_profiles.rb +8 -6
  47. data/app/lib/actions/katello/organization/create.rb +3 -5
  48. data/app/lib/actions/katello/organization/destroy.rb +1 -1
  49. data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
  50. data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
  51. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  52. data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
  53. data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
  54. data/app/lib/actions/katello/repository/create.rb +0 -8
  55. data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
  56. data/app/lib/actions/katello/repository/import_upload.rb +2 -0
  57. data/app/lib/actions/katello/repository/index_content.rb +1 -0
  58. data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
  59. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  60. data/app/lib/actions/katello/repository/sync.rb +3 -1
  61. data/app/lib/actions/katello/repository/update.rb +1 -8
  62. data/app/lib/actions/katello/repository/upload_files.rb +1 -0
  63. data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
  64. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +35 -0
  65. data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -2
  66. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
  67. data/app/lib/actions/pulp/repository/distributor_publish.rb +1 -1
  68. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -0
  69. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
  70. data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -0
  71. data/app/lib/actions/pulp3/content_migration.rb +10 -0
  72. data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
  73. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
  74. data/app/lib/actions/pulp3/content_view_version/export.rb +6 -1
  75. data/app/lib/actions/pulp3/import_migration.rb +6 -1
  76. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
  77. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +30 -9
  78. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
  79. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +0 -4
  80. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +4 -1
  81. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
  82. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
  83. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  84. data/app/lib/actions/pulp3/repository/delete.rb +1 -1
  85. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  86. data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
  87. data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
  88. data/app/lib/katello/event_daemon/monitor.rb +53 -0
  89. data/app/lib/katello/event_daemon/runner.rb +99 -0
  90. data/app/lib/katello/logging.rb +32 -0
  91. data/app/lib/katello/messaging/connection.rb +1 -7
  92. data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
  93. data/app/models/katello/activation_key.rb +2 -2
  94. data/app/models/katello/authorization/content_view_filter.rb +15 -0
  95. data/app/models/katello/authorization/content_view_version.rb +25 -2
  96. data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
  97. data/app/models/katello/authorization/organization.rb +8 -0
  98. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  99. data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
  100. data/app/models/katello/concerns/organization_extensions.rb +2 -2
  101. data/app/models/katello/concerns/pulp_database_unit.rb +7 -0
  102. data/app/models/katello/concerns/redhat_extensions.rb +2 -2
  103. data/app/models/katello/concerns/smart_proxy_extensions.rb +33 -5
  104. data/app/models/katello/content_migration_progress.rb +4 -0
  105. data/app/models/katello/content_view.rb +35 -5
  106. data/app/models/katello/content_view_environment.rb +2 -2
  107. data/app/models/katello/content_view_filter.rb +5 -0
  108. data/app/models/katello/content_view_history.rb +2 -1
  109. data/app/models/katello/content_view_package_filter.rb +1 -1
  110. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  111. data/app/models/katello/content_view_puppet_module.rb +8 -0
  112. data/app/models/katello/content_view_repository.rb +13 -1
  113. data/app/models/katello/content_view_version.rb +2 -1
  114. data/app/models/katello/content_view_version_export_history.rb +26 -1
  115. data/app/models/katello/erratum.rb +3 -1
  116. data/app/models/katello/glue/candlepin/pool.rb +2 -0
  117. data/app/models/katello/glue/pulp/repo.rb +0 -6
  118. data/app/models/katello/glue/pulp/repos.rb +1 -22
  119. data/app/models/katello/host/subscription_facet.rb +4 -0
  120. data/app/models/katello/ping.rb +11 -6
  121. data/app/models/katello/pool.rb +5 -0
  122. data/app/models/katello/product.rb +3 -3
  123. data/app/models/katello/repository.rb +36 -3
  124. data/app/models/katello/smart_proxy_sync_history.rb +8 -0
  125. data/app/models/katello/subscription_status.rb +3 -2
  126. data/app/presenters/katello/host_subscription_presenter.rb +3 -4
  127. data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
  128. data/app/services/katello/applicability/applicable_content_helper.rb +44 -15
  129. data/app/services/katello/candlepin_event_listener.rb +11 -19
  130. data/app/services/katello/event_monitor/poller_thread.rb +2 -11
  131. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
  132. data/app/services/katello/pulp3/api/docker.rb +4 -0
  133. data/app/services/katello/pulp3/content_view_version/export.rb +122 -6
  134. data/app/services/katello/pulp3/content_view_version/import.rb +37 -22
  135. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +6 -16
  136. data/app/services/katello/pulp3/content_view_version/import_validator.rb +84 -0
  137. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  138. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  139. data/app/services/katello/pulp3/migration.rb +51 -10
  140. data/app/services/katello/pulp3/repository.rb +13 -4
  141. data/app/services/katello/pulp3/repository/docker.rb +5 -0
  142. data/app/services/katello/pulp3/repository/yum.rb +15 -10
  143. data/app/services/katello/pulp3/task.rb +7 -3
  144. data/app/services/katello/pulp3/task_group.rb +10 -0
  145. data/app/services/katello/repository_type.rb +3 -2
  146. data/app/services/katello/smart_proxy_helper.rb +9 -0
  147. data/app/views/foreman/hosts/_registration.html.erb +12 -0
  148. data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
  149. data/app/views/foreman/smart_proxies/show.html.erb +1 -1
  150. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
  151. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
  152. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  153. data/app/views/katello/api/v2/content_views/show.json.rabl +6 -0
  154. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
  155. data/app/views/katello/layouts/react.html.erb +3 -2
  156. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
  157. data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
  158. data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
  159. data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
  160. data/config/katello.yaml.example +0 -3
  161. data/config/routes/api/v2.rb +31 -13
  162. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  163. data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
  164. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +5 -2
  165. data/db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb +13 -0
  166. data/db/migrate/20201021150008_add_import_only_to_katello_content_view.rb +5 -0
  167. data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
  168. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
  169. data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
  170. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
  171. data/db/seeds.d/104-proxy.rb +1 -1
  172. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +35 -40
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +12 -5
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +6 -2
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +8 -3
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +9 -3
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +12 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +7 -7
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +7 -1
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +4 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +17 -3
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +16 -2
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +5 -0
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +78 -7
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +8 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
  213. data/lib/katello/engine.rb +6 -6
  214. data/lib/katello/middleware/event_daemon.rb +1 -1
  215. data/lib/katello/permission_creator.rb +35 -14
  216. data/lib/katello/plugin.rb +8 -3
  217. data/lib/katello/tasks/delete_orphaned_content.rake +1 -3
  218. data/lib/katello/tasks/jenkins.rake +1 -1
  219. data/lib/katello/tasks/pulp3_content_switchover.rake +1 -1
  220. data/lib/katello/tasks/pulp3_migration.rake +18 -6
  221. data/lib/katello/tasks/pulp3_migration_abort.rake +22 -0
  222. data/lib/katello/tasks/pulp3_migration_stats.rake +28 -8
  223. data/lib/katello/tasks/pulp3_post_migration_check.rake +1 -3
  224. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  225. data/lib/katello/tasks/reimport.rake +1 -1
  226. data/lib/katello/tasks/repository.rake +3 -5
  227. data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
  228. data/lib/katello/version.rb +1 -1
  229. data/lib/proxy_api/container_gateway.rb +21 -0
  230. data/locale/action_names.rb +51 -51
  231. data/locale/bn/katello.edit.po +0 -0
  232. data/locale/bn/katello.po +136 -51
  233. data/locale/cs/katello.edit.po +0 -0
  234. data/locale/cs/katello.po +136 -49
  235. data/locale/de/katello.edit.po +0 -0
  236. data/locale/de/katello.po +136 -48
  237. data/locale/en/katello.edit.po +0 -0
  238. data/locale/en/katello.po +136 -48
  239. data/locale/es/katello.edit.po +0 -0
  240. data/locale/es/katello.po +136 -48
  241. data/locale/fr/katello.edit.po +0 -0
  242. data/locale/fr/katello.po +136 -48
  243. data/locale/gu/katello.edit.po +0 -0
  244. data/locale/gu/katello.po +136 -51
  245. data/locale/hi/katello.edit.po +0 -0
  246. data/locale/hi/katello.po +136 -51
  247. data/locale/it/katello.edit.po +0 -0
  248. data/locale/it/katello.po +136 -48
  249. data/locale/ja/katello.edit.po +0 -0
  250. data/locale/ja/katello.po +136 -48
  251. data/locale/katello.pot +941 -767
  252. data/locale/kn/katello.edit.po +0 -0
  253. data/locale/kn/katello.po +136 -51
  254. data/locale/ko/katello.edit.po +0 -0
  255. data/locale/ko/katello.po +136 -48
  256. data/locale/mr/katello.edit.po +0 -0
  257. data/locale/mr/katello.po +136 -51
  258. data/locale/or/katello.edit.po +0 -0
  259. data/locale/or/katello.po +136 -51
  260. data/locale/pa/katello.edit.po +0 -0
  261. data/locale/pa/katello.po +136 -51
  262. data/locale/pt/katello.edit.po +0 -0
  263. data/locale/pt/katello.po +136 -51
  264. data/locale/pt_BR/katello.edit.po +0 -0
  265. data/locale/pt_BR/katello.po +136 -48
  266. data/locale/ru/katello.edit.po +0 -0
  267. data/locale/ru/katello.po +136 -48
  268. data/locale/ta/katello.edit.po +0 -0
  269. data/locale/ta/katello.po +136 -51
  270. data/locale/te/katello.edit.po +0 -0
  271. data/locale/te/katello.po +136 -51
  272. data/locale/zh_CN/katello.edit.po +0 -0
  273. data/locale/zh_CN/katello.po +136 -48
  274. data/locale/zh_TW/katello.edit.po +0 -0
  275. data/locale/zh_TW/katello.po +136 -48
  276. data/package.json +1 -1
  277. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
  278. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
  279. data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
  280. data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
  281. data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
  282. data/webpack/components/SelectableDropdown/index.js +3 -0
  283. data/webpack/components/Table/TableWrapper.js +2 -1
  284. data/webpack/components/Table/helpers.js +14 -0
  285. data/webpack/components/TypeAhead/TypeAhead.js +2 -1
  286. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +2 -1
  287. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
  288. data/webpack/containers/Application/overrides.scss +6 -0
  289. data/webpack/index.js +6 -0
  290. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  291. data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
  292. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
  293. data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
  294. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
  295. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
  296. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
  297. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
  298. data/webpack/scenes/ContentViews/Copy/index.js +4 -0
  299. data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
  300. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
  301. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
  302. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
  303. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
  304. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
  305. data/webpack/scenes/ContentViews/Create/index.js +4 -0
  306. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
  307. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
  308. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
  309. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
  310. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
  311. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
  312. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
  313. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
  314. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
  315. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
  316. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
  317. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
  318. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
  319. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
  320. data/webpack/scenes/ContentViews/helpers.js +13 -0
  321. data/webpack/scenes/SmartProxy/Content.js +17 -0
  322. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
  323. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
  324. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
  325. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
  326. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
  327. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  328. data/webpack/scenes/SmartProxy/index.js +4 -0
  329. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +13 -11
  330. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
  331. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
  332. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
  333. data/webpack/test-utils/react-testing-lib-wrapper.js +8 -2
  334. data/webpack/utils/helpers.js +3 -0
  335. metadata +110 -31
  336. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
  337. data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
  338. data/app/services/katello/event_daemon.rb +0 -135
  339. data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
  340. data/lib/katello/tasks/common.rake +0 -7
  341. data/lib/katello/tasks/reports.rake +0 -4
  342. data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
  343. data/webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js +0 -3
  344. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
  345. data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -2,9 +2,9 @@ module Katello
2
2
  class Api::V2::ContentViewFiltersController < Api::V2::ApiController
3
3
  include Katello::Concerns::FilteredAutoCompleteSearch
4
4
 
5
- before_action :find_content_view
5
+ before_action :find_editable_content_view, :only => [:create, :update, :destroy]
6
+ before_action :find_readable_content_view, :only => [:show, :index, :auto_complete_search]
6
7
  before_action :find_filter, :except => [:index, :create, :auto_complete_search]
7
-
8
8
  wrap_parameters :include => (ContentViewFilter.attribute_names + %w(repository_ids))
9
9
 
10
10
  api :get, "/content_views/:content_view_id/filters", N_("list filters")
@@ -84,18 +84,27 @@ module Katello
84
84
 
85
85
  private
86
86
 
87
- def find_content_view
88
- @view = ContentView.find(params[:content_view_id]) if params[:content_view_id]
87
+ def find_readable_content_view
88
+ @view = ContentView.readable.find_by(id: params[:content_view_id]) if params[:content_view_id]
89
+ throw_resource_not_found(name: 'content view', id: params[:content_view_id]) if params[:content_view_id] && @view.nil?
90
+ end
91
+
92
+ def find_editable_content_view
93
+ @view = ContentView.editable.find_by(id: params[:content_view_id]) if params[:content_view_id]
94
+ throw_resource_not_found(name: 'content view', id: params[:content_view_id]) if params[:content_view_id] && @view.nil?
89
95
  end
90
96
 
91
97
  def find_filter
92
98
  if @view
93
99
  @filter = @view.filters.find_by(:id => params[:id])
94
- fail HttpErrors::NotFound, _("Couldn't find ContentViewFilter with id=%s") % params[:id] unless @filter
100
+ elsif params[:action] == 'show'
101
+ @filter = ContentViewFilter.readable.find_by(id: params[:id])
102
+ @view = @filter&.content_view
95
103
  else
96
- @filter = ContentViewFilter.find(params[:id])
97
- @view = @filter.content_view
104
+ @filter = ContentViewFilter.editable.find_by(id: params[:id])
105
+ @view = @filter&.content_view
98
106
  end
107
+ fail HttpErrors::NotFound, _("Couldn't find ContentViewFilter with id=%s") % params[:id] unless @filter
99
108
  end
100
109
 
101
110
  def filter_params
@@ -1,11 +1,13 @@
1
1
  module Katello
2
- # rubocop:disable Metrics/ClassLength
3
2
  class Api::V2::ContentViewVersionsController < Api::V2::ApiController
4
3
  include Concerns::Api::V2::BulkHostsExtensions
5
4
  include Katello::Concerns::FilteredAutoCompleteSearch
6
5
 
7
- before_action :find_content_view_version, :only => [:show, :update, :promote, :destroy, :export, :republish_repositories]
8
- before_action :find_content_view, :except => [:incremental_update]
6
+ before_action :find_authorized_katello_resource, :only => [:show, :update, :promote, :destroy, :export, :republish_repositories]
7
+ before_action :find_content_view_from_version, :only => [:show, :update, :promote, :destroy, :export, :republish_repositories]
8
+ before_action :find_optional_readable_content_view, :only => [:index]
9
+ before_action :find_publishable_content_view, :only => [:import]
10
+
9
11
  before_action :find_environment, :only => [:index]
10
12
  before_action :find_environments, :only => [:promote]
11
13
  before_action :validate_promotable, :only => [:promote]
@@ -47,7 +49,7 @@ module Katello
47
49
  api :GET, "/content_view_versions/:id", N_("Show content view version")
48
50
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
49
51
  def show
50
- respond :resource => @version
52
+ respond :resource => @content_view_version
51
53
  end
52
54
 
53
55
  api :POST, "/content_view_versions/:id/promote", N_("Promote a content view version")
@@ -58,7 +60,7 @@ module Katello
58
60
  def promote
59
61
  is_force = ::Foreman::Cast.to_bool(params[:force])
60
62
  task = async_task(::Actions::Katello::ContentView::Promote,
61
- @version, @environments, is_force, params[:description])
63
+ @content_view_version, @environments, is_force, params[:description])
62
64
  respond_for_async :resource => task
63
65
  end
64
66
 
@@ -66,59 +68,54 @@ module Katello
66
68
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
67
69
  param :description, String, :desc => N_("The description for the content view version"), :required => true
68
70
  def update
69
- history = @version.history.publish.successful.first
71
+ history = @content_view_version.history.publish.successful.first
70
72
  if history.blank?
71
73
  fail HttpErrors::BadRequest, _("This content view version doesn't have a history.")
72
74
  else
73
75
  history.notes = params[:description]
74
76
  history.save!
75
- respond_for_show(:resource => @version)
77
+ respond_for_show(:resource => @content_view_version)
76
78
  end
77
79
  end
78
80
 
79
81
  api :PUT, "/content_view_versions/:id/republish_repositories", N_("Forces a republish of the version's repositories' metadata")
80
82
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
81
83
  def republish_repositories
82
- task = async_task(::Actions::Katello::ContentViewVersion::RepublishRepositories, @version)
84
+ task = async_task(::Actions::Katello::ContentViewVersion::RepublishRepositories, @content_view_version)
83
85
  respond_for_async :resource => task
84
86
  end
85
87
 
86
- api :GET, "/content_view_versions/export_histories", N_("Show the export history for a content view version")
87
- param :content_view_version_id, :number, :desc => N_("Content view version identifier"), :required => false
88
- param :content_view_id, :number, :desc => N_("Content view identifier"), :required => false
89
- param :destination_server, String, :desc => N_("Destination Server name"), :required => false
90
- param :organization_id, :number, :desc => N_("Organization identifier"), :required => false
91
- param_group :search, Api::V2::ApiController
92
- add_scoped_search_description_for(ContentViewVersionExportHistory)
93
- def export_histories
94
- history = ContentViewVersionExportHistory.readable
95
- history = history.where(:content_view_version_id => params[:content_view_version_id]) unless params[:content_view_version_id].blank?
96
- history = history.where(:destination_server => params[:destination_server]) unless params[:destination_server].blank?
97
- history = history.with_organization_id(params[:organization_id]) unless params[:organization_id].blank?
98
- history = history.with_content_view_id(params[:content_view_id]) unless params[:content_view_id].blank?
99
- respond_for_index(:collection => scoped_search(history, 'id', 'asc', resource_class: ContentViewVersionExportHistory),
100
- :template => '../../../api/v2/content_view_version_export_histories/index')
101
- end
102
-
103
- api :GET, "/content_view_versions/export_api_status", N_("true if the export api is pulp3 ready and usable. This API is intended for use by hammer-cli only.")
104
- def export_api_status
105
- ::Foreman::Deprecation.api_deprecation_warning("export_api_status is being deprecated and will be removed in a future version of Katello.")
106
- render json: { api_usable: SmartProxy.pulp_primary.pulp3_repository_type_support?(Katello::Repository::YUM_TYPE) }, status: :ok
107
- end
108
-
109
- api :POST, "/content_view_versions/:id/export", N_("Export a content view version")
88
+ api :POST, "/content_view_versions/:id/export", N_("Export a content view version. Relevant only for Pulp 2 repositories.")
110
89
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
111
- param :destination_server, String, :desc => N_("Destination Server name, required for Pulp3")
112
- param :chunk_size_mb, :number, :desc => N_("Chunk export-tarfile into pieces of chunk_size mega bytes. Relevant only for Pulp 3 repositories"), :required => false
113
- param :export_to_iso, :bool, :desc => N_("Export to ISO format. Relevant only for Pulp 2 repositories"), :required => false
90
+ param :export_to_iso, :bool, :desc => N_("Export to ISO format."), :required => false
114
91
  param :iso_mb_size, :number, :desc => N_("maximum size of each ISO in MB. Relevant only for Pulp 2 repositories"), :required => false
115
92
  param :since, Date, :desc => N_("Optional date of last export (ex: 2010-01-01T12:00:00Z). Relevant only for Pulp 2 repositories"), :required => false
116
93
  def export
117
- task = if SmartProxy.pulp_primary.pulp3_repository_type_support?(Katello::Repository::YUM_TYPE)
118
- export_pulp_v3
119
- else
120
- export_pulp_v2
121
- end
94
+ if SmartProxy.pulp_primary.pulp3_repository_type_support?(Katello::Repository::YUM_TYPE)
95
+ fail HttpErrors::BadRequest, _("Invalid usage for Pulp 3 repositories. "\
96
+ "Use hammer content-export for Yum repositories")
97
+ end
98
+ ::Foreman::Deprecation.api_deprecation_warning("Export is being deprecated and will be removed in a future version of Katello. Use hammer content-view version export instead.")
99
+ if params[:export_to_iso].blank? && params[:iso_mb_size].present?
100
+ fail HttpErrors::BadRequest, _("ISO export must be enabled when specifying ISO size")
101
+ end
102
+
103
+ if (repos = @content_view_version.content_view.on_demand_repositories).any?
104
+ fail HttpErrors::BadRequest, _("This content view has on demand repositories that cannot be exported: %{repos}" % {repos: repos.pluck(:label).join(", ")})
105
+ end
106
+
107
+ if params[:since].present?
108
+ begin
109
+ params[:since].to_datetime
110
+ rescue
111
+ raise HttpErrors::BadRequest, _("Invalid date provided.")
112
+ end
113
+ end
114
+ task = async_task(::Actions::Katello::ContentViewVersion::Export, @content_view_version,
115
+ ::Foreman::Cast.to_bool(params[:export_to_iso]),
116
+ params[:since].try(:to_datetime),
117
+ params[:iso_mb_size])
118
+
122
119
  respond_for_async :resource => task
123
120
  end
124
121
 
@@ -127,14 +124,14 @@ module Katello
127
124
  param :path, String, :desc => N_("Directory containing the exported Content View Version"), :required => true
128
125
  param :metadata, Hash, :desc => N_("Metadata taken from the upstream export history for this Content View Version"), :required => true
129
126
  def import
130
- task = async_task(::Actions::Katello::ContentViewVersion::Import, @view, path: params[:path], metadata: metadata_params)
127
+ task = async_task(::Actions::Katello::ContentViewVersion::Import, @view, path: params[:path], metadata: metadata_params&.to_h)
131
128
  respond_for_async :resource => task
132
129
  end
133
130
 
134
131
  api :DELETE, "/content_view_versions/:id", N_("Remove content view version")
135
132
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
136
133
  def destroy
137
- task = async_task(::Actions::Katello::ContentViewVersion::Destroy, @version)
134
+ task = async_task(::Actions::Katello::ContentViewVersion::Destroy, @content_view_version)
138
135
  respond_for_async :resource => task
139
136
  end
140
137
 
@@ -174,7 +171,7 @@ module Katello
174
171
 
175
172
  validate_content(params[:add_content])
176
173
  resolve_dependencies = params.fetch(:resolve_dependencies, true)
177
- task = async_task(::Actions::Katello::ContentView::IncrementalUpdates, @version_environments, @composite_version_environments,
174
+ task = async_task(::Actions::Katello::ContentView::IncrementalUpdates, @content_view_version_environments, @composite_version_environments,
178
175
  params[:add_content], resolve_dependencies, hosts, params[:description])
179
176
  respond_for_async :resource => task
180
177
  end
@@ -200,17 +197,22 @@ module Katello
200
197
  find_bulk_hosts(:edit_hosts, params[:update_hosts], restrict_hosts)
201
198
  end
202
199
 
203
- def find_content_view_version
204
- @version = ContentViewVersion.find(params[:id])
205
- end
206
-
207
- def find_content_view
208
- @view = @version ? @version.content_view : ContentView.where(:id => params[:content_view_id]).first
200
+ def find_content_view_from_version
201
+ @view = @content_view_version.content_view
209
202
  if @view&.default? && params[:action] == "promote"
210
203
  fail HttpErrors::BadRequest, _("The default content view cannot be promoted")
211
204
  end
212
205
  end
213
206
 
207
+ def find_optional_readable_content_view
208
+ @view = ContentView.readable.find_by(:id => params[:content_view_id])
209
+ end
210
+
211
+ def find_publishable_content_view
212
+ @view = ContentView.publishable.find_by(:id => params[:content_view_id])
213
+ throw_resource_not_found(name: 'product', id: params[:product_id]) if @view.nil?
214
+ end
215
+
214
216
  def find_version_environments
215
217
  #Generates a data structure for incremental update:
216
218
  # [{:content_view_version => ContentViewVersion, :environments => [KTEnvironment]}]
@@ -218,7 +220,7 @@ module Katello
218
220
  list = params[:content_view_version_environments]
219
221
  fail _("At least one Content View Version must be specified") if list.empty?
220
222
 
221
- @version_environments = []
223
+ @content_view_version_environments = []
222
224
  @composite_version_environments = []
223
225
  list.each do |combination|
224
226
  version_environment = {
@@ -242,7 +244,7 @@ module Katello
242
244
  if view.composite?
243
245
  @composite_version_environments << version_environment
244
246
  else
245
- @version_environments << version_environment
247
+ @content_view_version_environments << version_environment
246
248
  @composite_version_environments += lookup_all_composites(version_environment[:content_view_version]) if params[:propagate_all_composites]
247
249
  end
248
250
  end
@@ -261,7 +263,7 @@ module Katello
261
263
  def find_version_environments_for_hosts(include_composites)
262
264
  if include_composites
263
265
  version_environments_for_systems_map = {}
264
- @version_environments.each do |version_environment|
266
+ @content_view_version_environments.each do |version_environment|
265
267
  version_environment[:content_view_version].composites.each do |composite_version|
266
268
  version_environments_for_systems_map[composite_version.id] ||= {:content_view_version => composite_version,
267
269
  :environments => composite_version.environments}
@@ -270,7 +272,7 @@ module Katello
270
272
 
271
273
  version_environments_for_systems_map.values
272
274
  else
273
- @version_environments.select { |ve| !ve[:environments].blank? }
275
+ @content_view_version_environments.select { |ve| !ve[:environments].blank? }
274
276
  end
275
277
  end
276
278
 
@@ -313,52 +315,15 @@ module Katello
313
315
 
314
316
  def validate_promotable
315
317
  fail HttpErrors::BadRequest, _("Could not find environments for promotion") if @environments.blank?
316
- return deny_access unless @environments.all?(&:promotable_or_removable?) && @version.content_view.promotable_or_removable?
318
+ return deny_access unless @environments.all?(&:promotable_or_removable?) && @content_view_version.content_view.promotable_or_removable?
317
319
  true
318
320
  end
319
321
 
320
322
  def authorize_destroy
321
- return deny_access unless @version.content_view.deletable?
323
+ return deny_access unless @content_view_version.content_view.deletable?
322
324
  true
323
325
  end
324
326
 
325
- def export_pulp_v2
326
- ::Foreman::Deprecation.api_deprecation_warning("Export is being deprecated and will be removed in a future version of Katello. Use hammer content-view version export instead.")
327
- if params[:export_to_iso].blank? && params[:iso_mb_size].present?
328
- fail HttpErrors::BadRequest, _("ISO export must be enabled when specifying ISO size")
329
- end
330
-
331
- if (repos = @version.content_view.on_demand_repositories).any?
332
- fail HttpErrors::BadRequest, _("This content view has on demand repositories that cannot be exported: %{repos}" % {repos: repos.pluck(:label).join(", ")})
333
- end
334
-
335
- if params[:since].present?
336
- begin
337
- params[:since].to_datetime
338
- rescue
339
- raise HttpErrors::BadRequest, _("Invalid date provided.")
340
- end
341
- end
342
- async_task(::Actions::Katello::ContentViewVersion::Export, @version,
343
- ::Foreman::Cast.to_bool(params[:export_to_iso]),
344
- params[:since].try(:to_datetime),
345
- params[:iso_mb_size])
346
- end
347
-
348
- def export_pulp_v3
349
- invalid_params = [:export_to_iso, :iso_mb_size, :since].reject { |param| params[param].blank? }
350
- unless invalid_params.empty?
351
- fail HttpErrors::BadRequest, _("Invalid parameters provided - %{params}. These are only relevant for Pulp 2 repositories" % { params: invalid_params.join(', ')})
352
- end
353
-
354
- if params[:destination_server].blank?
355
- fail HttpErrors::BadRequest, _("Destination Server Name required for Pulp3 repositories")
356
- end
357
-
358
- async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::Export, @version, destination_server: params[:destination_server],
359
- chunk_size: params[:chunk_size_mb])
360
- end
361
-
362
327
  def metadata_params
363
328
  params.require(:metadata).permit(
364
329
  :organization,
@@ -21,6 +21,7 @@ module Katello
21
21
  param :component_ids, Array, :desc => N_("List of component content view version ids for composite views")
22
22
  param :auto_publish, :bool, :desc => N_("Enable/Disable auto publish of composite view")
23
23
  param :solve_dependencies, :bool, :desc => N_("Solve RPM dependencies by default on Content View publish, defaults to false")
24
+ param :import_only, :bool, :desc => N_("Designate this Content View for importing from upstream servers only. Defaults to false") if pulp3_yum?
24
25
  end
25
26
 
26
27
  def filtered_associations
@@ -30,6 +31,10 @@ module Katello
30
31
  }
31
32
  end
32
33
 
34
+ def self.pulp3_yum?
35
+ SmartProxy.pulp_primary&.pulp3_repository_type_support?(Katello::Repository::YUM_TYPE)
36
+ end
37
+
33
38
  api :GET, "/organizations/:organization_id/content_views", N_("List content views")
34
39
  api :GET, "/content_views", N_("List content views")
35
40
  param :organization_id, :number, :desc => N_("organization identifier")
@@ -67,6 +72,10 @@ module Katello
67
72
  param :composite, :bool, :desc => N_("Composite content view")
68
73
  param_group :content_view
69
74
  def create
75
+ if ::Foreman::Cast.to_bool(params[:content_view][:import_only])
76
+ fail HttpErrors::BadRequest, _("Import-only content views will be available in a future version.") unless self.class.pulp3_yum?
77
+ end
78
+
70
79
  @content_view = ContentView.create!(view_params) do |view|
71
80
  view.organization = @organization
72
81
  view.label ||= labelize_params(params[:content_view])
@@ -181,8 +190,8 @@ module Katello
181
190
 
182
191
  api :PUT, "/content_views/:id/remove", N_("Remove versions and/or environments from a content view and reassign systems and keys")
183
192
  param :id, :number, :desc => N_("content view numeric identifier"), :required => true
184
- param :environment_ids, :number, :desc => N_("environment numeric identifiers to be removed")
185
- param :content_view_version_ids, :number, :desc => N_("content view version identifiers to be deleted")
193
+ param :environment_ids, Array, of: :number, :desc => N_("environment numeric identifiers to be removed")
194
+ param :content_view_version_ids, Array, of: :number, :desc => N_("content view version identifiers to be deleted")
186
195
  param :system_content_view_id, :number, :desc => N_("content view to reassign orphaned systems to")
187
196
  param :system_environment_id, :number, :desc => N_("environment to reassign orphaned systems to")
188
197
  param :key_content_view_id, :number, :desc => N_("content view to reassign orphaned activation keys to")
@@ -237,7 +246,7 @@ module Katello
237
246
  end
238
247
 
239
248
  def view_params
240
- attrs = [:name, :description, :force_puppet_environment, :auto_publish, :solve_dependencies,
249
+ attrs = [:name, :description, :force_puppet_environment, :auto_publish, :solve_dependencies, :import_only,
241
250
  :default, :created_at, :updated_at, :next_version, {:component_ids => []}]
242
251
  attrs.push(:label, :composite) if action_name == "create"
243
252
  if (!@content_view || !@content_view.composite?)
@@ -29,6 +29,7 @@ module Katello
29
29
 
30
30
  def find_host
31
31
  @host = resource_finder(::Host::Managed.authorized(:view_hosts, ::Host::Managed), params[:host_id])
32
+ throw_resource_not_found(name: 'host', id: params[:host_id]) if @host.nil?
32
33
  end
33
34
  end
34
35
  end
@@ -125,13 +125,13 @@ module Katello
125
125
 
126
126
  def find_host
127
127
  @host = resource_finder(::Host::Managed.authorized("view_hosts"), params[:host_id])
128
- fail HttpErrors::NotFound, _("Couldn't find host '%s'") % params[:host_id] if @host.nil?
128
+ throw_resource_not_found(name: 'host', id: params[:host_id]) if @host.nil?
129
129
  @host
130
130
  end
131
131
 
132
132
  def find_host_editable
133
133
  @host = resource_finder(::Host::Managed.authorized("edit_hosts"), params[:host_id])
134
- fail HttpErrors::NotFound, _("Couldn't find host '%s'") % params[:host_id] if @host.nil?
134
+ throw_resource_not_found(name: 'host', id: params[:host_id]) if @host.nil?
135
135
  @host
136
136
  end
137
137
 
@@ -42,9 +42,8 @@ module Katello
42
42
  def index_response(reload_host = false)
43
43
  # Host needs to be reloaded because of lazy accessor
44
44
  @host.reload if reload_host
45
- entitlements = @host.subscription_facet.candlepin_consumer.entitlements
46
- subscriptions = entitlements.map { |entitlement| ::Katello::HostSubscriptionPresenter.new(entitlement) }
47
- full_result_response(subscriptions)
45
+ presenter = ::Katello::HostSubscriptionsPresenter.new(@host)
46
+ full_result_response(presenter.subscriptions)
48
47
  end
49
48
 
50
49
  api :PUT, "/hosts/:host_id/subscriptions/auto_attach", N_("Trigger an auto-attach of subscriptions")
@@ -7,11 +7,12 @@ module Katello
7
7
  before_action :find_host_collections, :only => [:bulk_add_host_collections, :bulk_remove_host_collections]
8
8
  before_action :find_environment, :only => [:environment_content_view]
9
9
  before_action :find_content_view, :only => [:environment_content_view]
10
- before_action :find_editable_hosts, :except => [:destroy_hosts, :applicable_errata, :installable_errata, :resolve_traces]
10
+ before_action :find_editable_hosts, :except => [:destroy_hosts, :resolve_traces]
11
11
  before_action :find_deletable_hosts, :only => [:destroy_hosts]
12
12
  before_action :find_readable_hosts, :only => [:applicable_errata, :installable_errata, :available_incremental_updates]
13
13
  before_action :find_errata, :only => [:available_incremental_updates]
14
14
  before_action :find_organization, :only => [:add_subscriptions]
15
+ before_action :find_traces, :only => [:resolve_traces]
15
16
  before_action :deprecate_katello_agent, :only => [:install_content, :update_content, :remove_content]
16
17
 
17
18
  before_action :validate_content_action, :only => [:install_content, :update_content, :remove_content]
@@ -241,8 +242,7 @@ module Katello
241
242
  param_group :bulk_params
242
243
  param :trace_ids, Array, :required => true, :desc => N_("Array of Trace IDs")
243
244
  def resolve_traces
244
- traces = Katello::HostTracer.resolvable.where(id: params[:trace_ids])
245
- result = Katello::HostTraceManager.resolve_traces(traces)
245
+ result = Katello::HostTraceManager.resolve_traces(@traces)
246
246
 
247
247
  render json: result
248
248
  end
@@ -267,8 +267,9 @@ module Katello
267
267
  api :POST, "/hosts/bulk/available_incremental_updates", N_("Given a set of hosts and errata, lists the content view versions" \
268
268
  " and environments that need updating.")
269
269
  param_group :bulk_params
270
- param :errata_ids, Array, :desc => N_("List of Errata ids")
270
+ param :errata_ids, Array, :desc => N_("List of Errata ids"), :required => true
271
271
  def available_incremental_updates
272
+ fail HttpErrors::BadRequest, _("errata_ids is a required parameter") if params[:errata_ids].empty?
272
273
  version_environments = {}
273
274
  content_facets = Katello::Host::ContentFacet.with_non_installable_errata(@errata, @hosts)
274
275
 
@@ -314,7 +315,9 @@ module Katello
314
315
  end
315
316
 
316
317
  def find_host_collections
317
- @host_collections = HostCollection.where(:id => params[:host_collection_ids])
318
+ throw_resources_not_found(name: 'host collection', expected_ids: params[:host_collection_ids]) do
319
+ @host_collections = HostCollection.editable.where(id: params[:host_collection_ids])
320
+ end
318
321
  end
319
322
 
320
323
  def find_readable_hosts
@@ -377,11 +380,21 @@ module Katello
377
380
  end
378
381
 
379
382
  def find_environment
380
- @environment = KTEnvironment.find(params[:environment_id])
383
+ @environment = KTEnvironment.editable.find(params[:environment_id])
384
+ throw_resource_not_found(name: 'lifecycle environment', id: params[:environment_id]) unless @environment
385
+ @environment
381
386
  end
382
387
 
383
388
  def find_content_view
384
- @view = ContentView.find(params[:content_view_id])
389
+ @view = ContentView.editable.find(params[:content_view_id])
390
+ throw_resource_not_found(name: 'content view', id: params[:content_view_id]) unless @view
391
+ @view
392
+ end
393
+
394
+ def find_traces
395
+ throw_resources_not_found(name: 'host trace', expected_ids: params[:trace_ids]) do
396
+ @traces = Katello::HostTracer.resolvable.where(id: params[:trace_ids])
397
+ end
385
398
  end
386
399
 
387
400
  def disable_erratum_hosts_count