katello 3.13.4 → 3.14.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 (412) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +25 -16
  3. data/app/controllers/katello/api/v2/activation_keys_controller.rb +26 -21
  4. data/app/controllers/katello/api/v2/ansible_collections_controller.rb +6 -0
  5. data/app/controllers/katello/api/v2/content_uploads_controller.rb +8 -2
  6. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +8 -1
  7. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/errata_controller.rb +1 -1
  9. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +3 -3
  10. data/app/controllers/katello/api/v2/katello_ping_controller.rb +24 -0
  11. data/app/controllers/katello/api/v2/module_streams_controller.rb +21 -0
  12. data/app/controllers/katello/api/v2/package_groups_controller.rb +5 -0
  13. data/app/controllers/katello/api/v2/packages_controller.rb +16 -0
  14. data/app/controllers/katello/api/v2/repositories_controller.rb +7 -4
  15. data/app/controllers/katello/api/v2/srpms_controller.rb +1 -1
  16. data/app/controllers/katello/api/v2/subscriptions_controller.rb +5 -1
  17. data/app/controllers/katello/api/v2/sync_plans_controller.rb +7 -5
  18. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +36 -5
  19. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +12 -0
  20. data/app/lib/actions/katello/capsule_content/refresh_repos.rb +55 -0
  21. data/app/lib/actions/katello/capsule_content/sync.rb +13 -64
  22. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +40 -0
  23. data/app/lib/actions/katello/content_view/publish.rb +0 -3
  24. data/app/lib/actions/katello/content_view_puppet_environment/destroy.rb +1 -3
  25. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +21 -0
  26. data/app/lib/actions/katello/repository/create.rb +8 -0
  27. data/app/lib/actions/katello/repository/import_upload.rb +13 -12
  28. data/app/lib/actions/katello/repository/metadata_generate.rb +2 -2
  29. data/app/lib/actions/katello/repository/update.rb +9 -0
  30. data/app/lib/actions/katello/repository/upload_files.rb +4 -11
  31. data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -0
  32. data/app/lib/actions/pulp/orchestration/orphan_cleanup/remove_orphans.rb +16 -0
  33. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +25 -0
  34. data/app/lib/actions/pulp/orchestration/repository/smart_proxy_sync.rb +34 -0
  35. data/app/lib/actions/pulp/orchestration/repository/upload_content.rb +35 -0
  36. data/app/lib/actions/pulp/orphan_cleanup/remove_orphans.rb +15 -0
  37. data/app/lib/actions/{katello/capsule_content → pulp/orphan_cleanup}/remove_unneeded_repos.rb +2 -2
  38. data/app/lib/actions/pulp/repository/import_upload.rb +7 -11
  39. data/app/lib/actions/pulp3/abstract_async_task.rb +7 -7
  40. data/app/lib/actions/pulp3/capsule_content/generate_metadata.rb +32 -0
  41. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +31 -0
  42. data/app/lib/actions/pulp3/capsule_content/sync.rb +26 -0
  43. data/app/lib/actions/pulp3/orchestration/orphan_cleanup/remove_orphans.rb +20 -0
  44. data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +15 -15
  45. data/app/lib/actions/pulp3/orchestration/repository/create.rb +3 -1
  46. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +36 -0
  47. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +24 -0
  48. data/app/lib/actions/pulp3/orchestration/repository/sync.rb +1 -1
  49. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +25 -0
  50. data/app/lib/actions/pulp3/orphan_cleanup/delete_orphan_repository_versions.rb +20 -0
  51. data/app/lib/actions/pulp3/orphan_cleanup/remove_unneeded_repos.rb +16 -0
  52. data/app/lib/actions/pulp3/repository/create_publication.rb +1 -5
  53. data/app/lib/actions/pulp3/repository/import_upload.rb +21 -0
  54. data/app/lib/actions/pulp3/repository/save_artifact.rb +19 -0
  55. data/app/lib/actions/pulp3/repository/save_version.rb +3 -2
  56. data/app/lib/actions/pulp3/repository/sync.rb +1 -1
  57. data/app/lib/actions/pulp3/repository/upload_file.rb +76 -0
  58. data/app/lib/katello/api/v2/rendering.rb +1 -2
  59. data/app/lib/katello/concerns/base_template_scope_extensions.rb +34 -2
  60. data/app/lib/katello/errors.rb +21 -0
  61. data/app/lib/katello/resources/candlepin/consumer.rb +0 -9
  62. data/app/lib/katello/resources/candlepin/owner.rb +0 -5
  63. data/app/lib/katello/resources/candlepin/product.rb +2 -6
  64. data/app/lib/katello/resources/registry.rb +25 -10
  65. data/app/lib/katello/util/filter_clause_generator.rb +1 -1
  66. data/app/lib/katello/util/module_stream_clause_generator.rb +49 -0
  67. data/app/lib/katello/util/package_clause_generator.rb +1 -1
  68. data/app/models/katello/ansible_collection.rb +5 -8
  69. data/app/models/katello/ansible_collection_tag.rb +8 -0
  70. data/app/models/katello/ansible_tag.rb +8 -0
  71. data/app/models/katello/concerns/host_managed_extensions.rb +16 -14
  72. data/app/models/katello/concerns/pulp_database_unit.rb +27 -4
  73. data/app/models/katello/concerns/search_by_repository_name.rb +4 -1
  74. data/app/models/katello/concerns/smart_proxy_extensions.rb +44 -20
  75. data/app/models/katello/content_view_docker_filter.rb +15 -2
  76. data/app/models/katello/content_view_filter.rb +28 -8
  77. data/app/models/katello/content_view_module_stream_filter.rb +14 -0
  78. data/app/models/katello/content_view_module_stream_filter_rule.rb +11 -0
  79. data/app/models/katello/content_view_package_filter.rb +18 -8
  80. data/app/models/katello/content_view_version.rb +7 -2
  81. data/app/models/katello/deb.rb +0 -8
  82. data/app/models/katello/docker_manifest.rb +0 -8
  83. data/app/models/katello/docker_manifest_list.rb +0 -8
  84. data/app/models/katello/docker_meta_tag.rb +38 -20
  85. data/app/models/katello/docker_tag.rb +22 -33
  86. data/app/models/katello/erratum.rb +10 -8
  87. data/app/models/katello/file_unit.rb +1 -13
  88. data/app/models/katello/glue/candlepin/owner.rb +0 -5
  89. data/app/models/katello/glue/candlepin/product.rb +1 -5
  90. data/app/models/katello/glue/pulp/repo.rb +1 -1
  91. data/app/models/katello/host/content_facet.rb +6 -0
  92. data/app/models/katello/host_collection.rb +4 -0
  93. data/app/models/katello/installed_package.rb +4 -0
  94. data/app/models/katello/module_stream.rb +1 -12
  95. data/app/models/katello/ostree_branch.rb +0 -7
  96. data/app/models/katello/package_group.rb +0 -7
  97. data/app/models/katello/ping.rb +10 -3
  98. data/app/models/katello/pool.rb +11 -1
  99. data/app/models/katello/puppet_module.rb +0 -7
  100. data/app/models/katello/repository.rb +15 -6
  101. data/app/models/katello/repository_docker_meta_tag.rb +7 -0
  102. data/app/models/katello/repository_docker_tag.rb +7 -0
  103. data/app/models/katello/repository_file_unit.rb +7 -0
  104. data/app/models/katello/rhsm_fact_name.rb +5 -1
  105. data/app/models/katello/rhsm_fact_parser.rb +17 -1
  106. data/app/models/katello/root_repository.rb +11 -6
  107. data/app/models/katello/rpm.rb +0 -8
  108. data/app/models/katello/srpm.rb +0 -8
  109. data/app/models/katello/upstream_pool.rb +2 -0
  110. data/app/models/katello/yum_metadata_file.rb +0 -4
  111. data/app/models/setting/content.rb +124 -128
  112. data/app/services/katello/candlepin/consumer.rb +0 -1
  113. data/app/services/katello/pulp/content.rb +11 -4
  114. data/app/services/katello/pulp/docker_tag.rb +0 -1
  115. data/app/services/katello/pulp/pulp_content_unit.rb +4 -0
  116. data/app/services/katello/pulp/repository.rb +53 -0
  117. data/app/services/katello/pulp/repository/file.rb +1 -1
  118. data/app/services/katello/pulp/repository/puppet.rb +8 -1
  119. data/app/services/katello/pulp/repository/yum.rb +42 -9
  120. data/app/services/katello/pulp/smart_proxy_repository.rb +13 -96
  121. data/app/services/katello/pulp3/ansible_collection.rb +7 -3
  122. data/app/services/katello/pulp3/content.rb +60 -0
  123. data/app/services/katello/pulp3/docker_blob.rb +1 -1
  124. data/app/services/katello/pulp3/docker_manifest.rb +1 -1
  125. data/app/services/katello/pulp3/docker_manifest_list.rb +1 -1
  126. data/app/services/katello/pulp3/docker_tag.rb +2 -2
  127. data/app/services/katello/pulp3/file_unit.rb +7 -1
  128. data/app/services/katello/pulp3/pulp_content_unit.rb +15 -5
  129. data/app/services/katello/pulp3/repository.rb +301 -24
  130. data/app/services/katello/pulp3/repository/ansible_collection.rb +5 -1
  131. data/app/services/katello/pulp3/repository/docker.rb +54 -9
  132. data/app/services/katello/pulp3/repository/file.rb +8 -0
  133. data/app/services/katello/pulp3/repository/yum.rb +61 -0
  134. data/app/services/katello/pulp3/smart_proxy_repository.rb +38 -0
  135. data/app/services/katello/repository_type_manager.rb +7 -0
  136. data/app/services/katello/smart_proxy_helper.rb +50 -0
  137. data/app/views/foreman/smart_proxies/_content_tab.html.erb +1 -1
  138. data/app/views/katello/api/v2/ansible_collections/base.json.rabl +5 -0
  139. data/app/views/katello/api/v2/ansible_collections/show.json.rabl +7 -0
  140. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -0
  141. data/app/views/katello/api/v2/content_view_filter_rules/show.json.rabl +1 -1
  142. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  143. data/app/views/katello/api/v2/content_view_filters/show.json.rabl +2 -1
  144. data/app/views/katello/api/v2/hosts_bulk_actions/erratum.json.rabl +2 -0
  145. data/app/views/katello/api/v2/{ping → katello_ping}/server_status.json.rabl +0 -0
  146. data/app/views/katello/api/v2/{ping → katello_ping}/show.json.rabl +0 -0
  147. data/app/views/katello/api/v2/{ping → katello_ping}/version.json.rabl +0 -0
  148. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -1
  149. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  150. data/app/views/katello/api/v2/subscriptions/index.json.rabl +1 -0
  151. data/app/views/katello/api/v2/subscriptions/permissions.rabl +11 -0
  152. data/config/katello.yaml.example +9 -0
  153. data/config/routes.rb +2 -1
  154. data/config/routes/api/v2.rb +2 -2
  155. data/db/migrate/20180920214134_create_repository_root.rb +1 -1
  156. data/db/migrate/20190730183518_add_docker_tag_join_table.rb +25 -0
  157. data/db/migrate/20190730203334_add_docker_meta_tag_join_table.rb +25 -0
  158. data/db/migrate/20190814025338_create_content_view_module_stream_filter_rules.rb +13 -0
  159. data/db/migrate/20190816162733_rename_ansible_collection_whitelist_to_requirements.rb +5 -0
  160. data/db/migrate/20190822144300_add_ansible_fields.rb +18 -0
  161. data/db/migrate/20190912210927_rename_repository_file_unit.rb +12 -0
  162. data/engines/bastion/README.md +2 -2
  163. data/engines/bastion/app/assets/javascripts/bastion/components/bst-edit.directive.js +2 -1
  164. data/engines/bastion/app/assets/javascripts/bastion/components/nutupane.factory.js +20 -6
  165. data/engines/bastion/app/assets/javascripts/bastion/components/views/bst-modal.html +1 -1
  166. data/engines/bastion/app/assets/javascripts/bastion/layouts/partials/table.html +2 -1
  167. data/engines/bastion/app/assets/stylesheets/bastion/overrides.scss +1 -0
  168. data/engines/bastion/lib/bastion.rb +1 -0
  169. data/engines/bastion_katello/README.md +1 -2
  170. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js +1 -4
  171. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ansible-collections/ansible-collections.factory.js +28 -0
  172. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ansible-collections/ansible-collections.module.js +15 -0
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +1 -0
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion_katello.js +3 -0
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +4 -0
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +0 -6
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-destroy-modal.html +3 -3
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +2 -34
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-repository-sets-modal.html +1 -1
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-client.directive.js +6 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +0 -11
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -4
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages.controller.js +3 -1
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +1 -3
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +2 -5
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-installed.html +1 -4
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +4 -16
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +1 -1
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +13 -0
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +1 -13
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +47 -5
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +1 -1
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +1 -1
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +1 -1
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +68 -0
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +2 -1
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +37 -0
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +4 -1
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +73 -0
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +4 -1
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +14 -1
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +3 -0
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -2
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +5 -0
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +43 -0
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +4 -0
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +41 -0
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +43 -0
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +4 -0
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +1 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +1 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +3 -3
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +1 -2
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +1 -1
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +3 -0
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.controller.js +1 -1
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-add-hosts.html +1 -1
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-info.html +44 -35
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -1
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +12 -0
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +5 -3
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +21 -3
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-ansible-collections.html +36 -0
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +1 -1
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +24 -2
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +29 -15
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js +9 -0
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +1 -1
  230. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/bastion_katello.scss +8 -0
  231. data/engines/bastion_katello/lib/bastion_katello/engine.rb +8 -8
  232. data/lib/katello/engine.rb +0 -4
  233. data/lib/katello/plugin.rb +19 -1
  234. data/lib/katello/repository_types/yum.rb +2 -0
  235. data/lib/katello/tasks/delete_orphaned_content.rake +1 -1
  236. data/lib/katello/tasks/reimport.rake +1 -1
  237. data/lib/katello/version.rb +1 -1
  238. data/package.json +9 -5
  239. data/webpack/__mocks__/foremanReact/common/helpers.js +4 -1
  240. data/webpack/__mocks__/foremanReact/components/PermissionDenied/index.js +2 -0
  241. data/webpack/components/Content/ContentPage.js +55 -0
  242. data/webpack/{scenes/ModuleStreams/ModuleStreamsTable.js → components/Content/ContentTable.js} +9 -8
  243. data/webpack/components/Content/Details/ContentDetailInfo.js +33 -0
  244. data/webpack/{scenes/ModuleStreams/Details/Repositories/ModuleStreamDetailRepositories.js → components/Content/Details/ContentDetailRepositories.js} +4 -4
  245. data/webpack/{scenes/ModuleStreams/Details/Repositories/TableSchema.js → components/Content/Details/ContentDetailRepositoryTableSchema.js} +1 -1
  246. data/webpack/components/Content/Details/ContentDetails.js +70 -0
  247. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +28 -0
  248. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +22 -0
  249. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +64 -0
  250. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetailInfo.test.js.snap +39 -0
  251. data/webpack/{scenes/ModuleStreams/Details/Repositories/__tests__/__snapshots__/ModuleStreamDetailRepositories.test.js.snap → components/Content/Details/__tests__/__snapshots__/ContentDetailRepositories.test.js.snap} +3 -9
  252. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +137 -0
  253. data/webpack/components/Content/__tests__/ContentPage.test.js +36 -0
  254. data/webpack/components/Content/__tests__/ContentTable.test.js +40 -0
  255. data/webpack/components/Content/__tests__/__snapshots__/ContentPage.test.js.snap +70 -0
  256. data/webpack/components/Content/__tests__/__snapshots__/ContentTable.test.js.snap +33 -0
  257. data/webpack/components/Search/index.js +6 -7
  258. data/webpack/components/SelectOrg/SelectOrgAction.js +20 -22
  259. data/webpack/containers/Application/config.js +10 -0
  260. data/webpack/containers/Application/overrides.scss +5 -0
  261. data/webpack/move_to_foreman/common/helpers.js +1 -1
  262. data/webpack/move_to_foreman/components/common/table/components/TableSelectionCell.js +5 -2
  263. data/webpack/move_to_foreman/components/common/table/formatters/EntitlementsInlineEditFormatter.js +9 -2
  264. data/webpack/move_to_foreman/components/common/table/formatters/collapseableAndSelectionCellFormatter.js +2 -0
  265. data/webpack/move_to_foreman/components/common/table/formatters/selectionCellFormatter.js +3 -0
  266. data/webpack/move_to_pf/TypeAhead/TypeAhead.js +1 -0
  267. data/webpack/redux/OrganizationProducts/OrganizationProductsActions.js +10 -10
  268. data/webpack/redux/actions/RedHatRepositories/__tests__/enabled.test.js +39 -0
  269. data/webpack/redux/actions/RedHatRepositories/enabled.js +24 -24
  270. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  271. data/webpack/redux/actions/RedHatRepositories/repositorySetRepositories.js +23 -22
  272. data/webpack/redux/actions/RedHatRepositories/sets.js +17 -21
  273. data/webpack/redux/reducers/RedHatRepositories/__tests__/enabled.test.js +1 -0
  274. data/webpack/redux/reducers/RedHatRepositories/__tests__/sets.test.js +1 -1
  275. data/webpack/redux/reducers/RedHatRepositories/enabled.fixtures.js +1 -0
  276. data/webpack/redux/reducers/RedHatRepositories/enabled.js +42 -33
  277. data/webpack/redux/reducers/RedHatRepositories/sets.fixtures.js +2 -1
  278. data/webpack/redux/reducers/RedHatRepositories/sets.js +2 -1
  279. data/webpack/redux/reducers/index.js +4 -0
  280. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +30 -0
  281. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +3 -0
  282. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +80 -0
  283. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +39 -0
  284. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +60 -0
  285. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss +0 -0
  286. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +91 -0
  287. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +23 -0
  288. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +3 -0
  289. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +30 -0
  290. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +35 -0
  291. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +16 -0
  292. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +25 -0
  293. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +29 -0
  294. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +41 -0
  295. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +33 -0
  296. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +83 -0
  297. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +190 -0
  298. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +54 -0
  299. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +50 -0
  300. data/webpack/scenes/AnsibleCollections/Details/index.js +17 -0
  301. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +25 -0
  302. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +52 -0
  303. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +48 -0
  304. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +46 -0
  305. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +27 -0
  306. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +73 -0
  307. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +81 -0
  308. data/webpack/scenes/AnsibleCollections/index.js +17 -0
  309. data/webpack/scenes/ModuleStreams/Details/ModuleDetailsSchema.js +56 -0
  310. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetails.js +7 -71
  311. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsActions.js +9 -11
  312. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailInfo.test.js +5 -3
  313. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetails.test.js.snap +453 -507
  314. data/webpack/scenes/ModuleStreams/ModuleStreamsActions.js +10 -11
  315. data/webpack/scenes/ModuleStreams/ModuleStreamsPage.js +12 -33
  316. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +2 -4
  317. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsActions.test.js +8 -9
  318. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +5 -3
  319. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamPage.test.js.snap +83 -65
  320. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap +1 -1
  321. data/webpack/scenes/Organizations/OrganizationActions.js +27 -32
  322. data/webpack/scenes/Organizations/__tests__/OrganizationActions.test.js +12 -12
  323. data/webpack/scenes/Organizations/__tests__/organizations.fixtures.js +1 -1
  324. data/webpack/scenes/Products/ProductActions.js +10 -10
  325. data/webpack/scenes/Products/__tests__/ProductActions.test.js +6 -6
  326. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +118 -0
  327. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +51 -0
  328. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +117 -0
  329. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +44 -45
  330. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/EnabledRepository.test.js +84 -5
  331. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/RepositorySetRepository.js +46 -47
  332. data/webpack/scenes/RedHatRepositories/helpers.js +1 -1
  333. data/webpack/scenes/RedHatRepositories/index.js +2 -101
  334. data/webpack/scenes/Settings/Tables/TableActions.js +42 -43
  335. data/webpack/scenes/Settings/Tables/__tests__/TableActions.test.js +18 -18
  336. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailActions.js +10 -10
  337. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +7 -6
  338. data/webpack/scenes/Subscriptions/Details/__tests__/SubscriptionDetailActions.test.js +8 -8
  339. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +2 -2
  340. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +142 -113
  341. data/webpack/scenes/Subscriptions/Manifest/Manifest.scss +8 -0
  342. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +40 -40
  343. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +24 -24
  344. data/webpack/scenes/Subscriptions/Manifest/__tests__/__snapshots__/ManageManifestModal.test.js.snap +0 -199
  345. data/webpack/scenes/Subscriptions/SubscriptionActions.js +52 -46
  346. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +21 -2
  347. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +64 -42
  348. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +3 -0
  349. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsActions.js +21 -21
  350. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +20 -21
  351. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsTableSchema.js +1 -15
  352. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsActions.test.js +12 -13
  353. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +11 -14
  354. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +21 -23
  355. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +35 -1
  356. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +13 -0
  357. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsReducer.test.js.snap +7 -0
  358. data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +18 -0
  359. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +5 -4
  360. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableHelpers.js +26 -5
  361. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +9 -1
  362. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.fixtures.js +27 -2
  363. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTableHelpers.test.js +5 -4
  364. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +1 -0
  365. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Dialogs/UpdateDialog.js +9 -9
  366. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +8 -3
  367. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +28 -23
  368. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +0 -135
  369. data/webpack/scenes/Subscriptions/index.js +2 -0
  370. data/webpack/scenes/Tasks/TaskActions.js +36 -31
  371. data/webpack/scenes/Tasks/__tests__/TaskActions.test.js +35 -47
  372. metadata +146 -67
  373. data/app/controllers/katello/api/v2/ping_controller.rb +0 -24
  374. data/app/lib/actions/katello/capsule_content/create_repos.rb +0 -30
  375. data/app/lib/actions/katello/capsule_content/remove_orphans.rb +0 -21
  376. data/app/lib/actions/pulp/repository/refresh_needed.rb +0 -37
  377. data/app/lib/katello/resources/candlepin/owner_info.rb +0 -18
  378. data/app/models/katello/glue/candlepin/owner_info.rb +0 -41
  379. data/app/models/katello/repository_file.rb +0 -7
  380. data/app/overrides/add_subscription_status.rb +0 -6
  381. data/app/views/overrides/hosts/_subscription_link.html.erb +0 -6
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-events.controller.js +0 -17
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-events.html +0 -30
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/content-access-mode-banner.directive.js +0 -22
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/subscription-details.controller.js +0 -58
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/subscription-product-details.controller.js +0 -12
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/subscription-products.controller.js +0 -30
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-details.html +0 -25
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-info.html +0 -120
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-products.html +0 -54
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/grouped.filter.js +0 -21
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest-details.controller.js +0 -34
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest-history.controller.js +0 -18
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest-import.controller.js +0 -261
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest.controller.js +0 -16
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-delete-modal.html +0 -19
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-details.html +0 -46
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-import-history.html +0 -17
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-import.html +0 -92
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest.html +0 -33
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscription-start-date.directive.js +0 -21
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscription-type.directive.js +0 -16
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscriptionAttachAmountFilter.filter.js +0 -16
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscriptions.controller.js +0 -73
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscriptions.routes.js +0 -110
  406. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +0 -5
  407. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-start-date.html +0 -2
  408. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-type.html +0 -18
  409. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscriptions-delete-bulk.html +0 -4
  410. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscriptions.html +0 -63
  411. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailInfo.js +0 -52
  412. data/webpack/scenes/ModuleStreams/Details/Repositories/__tests__/ModuleStreamDetailRepositories.test.js +0 -16
@@ -22,7 +22,7 @@ module Katello
22
22
  api :GET, "/activation_keys/:activation_key_id/subscriptions", N_("List an activation key's subscriptions")
23
23
  api :GET, "/subscriptions"
24
24
  param_group :search, Api::V2::ApiController
25
- param :organization_id, :number, :desc => N_("Organization ID"), :required => true
25
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => false
26
26
  param :host_id, String, :desc => N_("id of a host"), :required => false
27
27
  param :activation_key_id, String, :desc => N_("Activation key ID"), :required => false
28
28
  param :available_for, String, :desc => N_("Object to show subscriptions available for, either 'host' or 'activation_key'"), :required => false
@@ -75,7 +75,11 @@ module Katello
75
75
  param :organization_id, :number, :desc => N_("Organization identifier")
76
76
  param :id, :number, :desc => N_("Subscription identifier"), :required => true
77
77
  def show
78
+ org_id = Organization.current&.id
78
79
  @resource = Katello::Pool.with_identifier(params[:id])
80
+ if @resource.organization_id != org_id
81
+ fail ActiveRecord::RecordNotFound, N_('This subscription is not relevant to the current organization.')
82
+ end
79
83
  respond(:resource => @resource)
80
84
  end
81
85
 
@@ -18,7 +18,7 @@ module Katello
18
18
 
19
19
  api :GET, "/sync_plans", N_("List sync plans")
20
20
  api :GET, "/organizations/:organization_id/sync_plans"
21
- param :organization_id, :number, :desc => N_("Filter sync plans by organization name or label"), :required => true
21
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
22
22
  param :name, String, :desc => N_("filter by name")
23
23
  param :sync_date, String, :desc => N_("filter by sync date")
24
24
  param :interval, SyncPlan::TYPES, :desc => N_("filter by interval")
@@ -38,14 +38,14 @@ module Katello
38
38
 
39
39
  api :GET, "/organizations/:organization_id/sync_plans/:id", N_("Show a sync plan")
40
40
  api :GET, "/sync_plans/:id", N_("Show a sync plan")
41
- param :organization_id, :number, :desc => N_("Filter sync plans by organization name or label")
41
+ param :organization_id, :number, :desc => N_("Organization ID")
42
42
  param :id, :number, :desc => N_("sync plan numeric identifier"), :required => true
43
43
  def show
44
44
  respond_for_show(:resource => @sync_plan)
45
45
  end
46
46
 
47
47
  api :POST, "/organizations/:organization_id/sync_plans", N_("Create a sync plan")
48
- param :organization_id, :number, :desc => N_("Filter sync plans by organization name or label"), :required => true
48
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
49
49
  param_group :sync_plan
50
50
  def create
51
51
  if params[:sync_plan].key?(:enabled) || params.key?(:enabled)
@@ -62,7 +62,7 @@ module Katello
62
62
 
63
63
  api :PUT, "/organizations/:organization_id/sync_plans/:id", N_("Update a sync plan")
64
64
  api :PUT, "/sync_plans/:id", N_("Update a sync plan")
65
- param :organization_id, :number, :desc => N_("Filter sync plans by organization name or label")
65
+ param :organization_id, :number, :desc => N_("Organization ID")
66
66
  param :id, :number, :desc => N_("sync plan numeric identifier"), :required => true
67
67
  param_group :sync_plan
68
68
  def update
@@ -79,13 +79,14 @@ module Katello
79
79
 
80
80
  api :DELETE, "/organizations/:organization_id/sync_plans/:id", N_("Destroy a sync plan")
81
81
  api :DELETE, "/sync_plans/:id", N_("Destroy a sync plan")
82
- param :organization_id, :number, :desc => N_("Filter sync plans by organization name or label")
82
+ param :organization_id, :number, :desc => N_("Organization ID")
83
83
  param :id, :number, :desc => N_("sync plan numeric identifier")
84
84
  def destroy
85
85
  @sync_plan.destroy!
86
86
  end
87
87
 
88
88
  api :PUT, "/organizations/:organization_id/sync_plans/:id/add_products", N_("Add products to sync plan")
89
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
89
90
  param :id, String, :desc => N_("ID of the sync plan"), :required => true
90
91
  param :product_ids, Array, :desc => N_("List of product ids to add to the sync plan"), :required => true
91
92
  def add_products
@@ -96,6 +97,7 @@ module Katello
96
97
  end
97
98
 
98
99
  api :PUT, "/organizations/:organization_id/sync_plans/:id/remove_products", N_("Remove products from sync plan")
100
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
99
101
  param :id, String, :desc => N_("ID of the sync plan"), :required => true
100
102
  param :product_ids, Array, :desc => N_("List of product ids to remove from the sync plan"), :required => true
101
103
  def remove_products
@@ -10,7 +10,7 @@ module Katello
10
10
  before_action :find_optional_organization, :only => [:index, :auto_complete_search]
11
11
  before_action :find_environment, :only => [:index, :auto_complete_search]
12
12
  before_action :find_content_view_version, :only => [:index, :auto_complete_search]
13
- before_action :find_filter, :only => [:index, :auto_complete_search]
13
+ before_action :find_filter, :find_filter_rule, :only => [:index, :auto_complete_search]
14
14
  before_action :find_content_resource, :only => [:show]
15
15
  end
16
16
 
@@ -23,6 +23,7 @@ module Katello
23
23
  param :organization_id, :number, :desc => N_("organization identifier")
24
24
  param :content_view_version_id, :number, :desc => N_("content view version identifier")
25
25
  param :content_view_filter_id, :number, :desc => N_("content view filter identifier")
26
+ param :content_view_filter_rule_id, :number, :desc => N_("content view filter rule identifier")
26
27
  param :repository_id, :number, :desc => N_("repository identifier")
27
28
  param :environment_id, :number, :desc => N_("environment identifier")
28
29
  param :ids, Array, :desc => N_("ids to filter content by")
@@ -79,12 +80,20 @@ module Katello
79
80
 
80
81
  collection = filter_by_repos(repos, collection)
81
82
  collection = filter_by_ids(params[:ids], collection) if params[:ids]
83
+
82
84
  @filter = ContentViewFilter.find(params[:filterId]) if params[:filterId]
83
85
  if params[:available_for] == "content_view_filter" && self.respond_to?(:available_for_content_view_filter)
84
86
  collection = self.available_for_content_view_filter(@filter, collection) if @filter
85
87
  else
86
- collection = filter_by_content_view_filter(@filter, collection) if @filter
88
+ # Filtering by the CV filter rule makes filtering by the CV filter redundant, keeping these
89
+ # exclusive to keep the queries simple.
90
+ if @filter_rule
91
+ collection = filter_by_content_view_filter_rule(@filter_rule, collection)
92
+ elsif @filter
93
+ collection = filter_by_content_view_filter(@filter, collection)
94
+ end
87
95
  end
96
+
88
97
  collection = self.custom_index_relation(collection) if self.respond_to?(:custom_index_relation)
89
98
  collection
90
99
  end
@@ -105,9 +114,12 @@ module Katello
105
114
  end
106
115
  end
107
116
 
108
- def filter_by_content_view_filter(filter, collection)
109
- ids = filter.send("#{singular_resource_name}_rules").pluck(:uuid)
110
- filter_by_ids(ids, collection)
117
+ def filter_by_content_view_filter(_filter, _collection)
118
+ fail NotImplementedError, "Unsupported content type for content view filter parameter"
119
+ end
120
+
121
+ def filter_by_content_view_filter_rule(_filter, _collection)
122
+ fail NotImplementedError, "Unsupported content type for content view filter rule parameter"
111
123
  end
112
124
 
113
125
  def repos
@@ -193,6 +205,19 @@ module Katello
193
205
  end
194
206
  end
195
207
 
208
+ def find_filter_rule
209
+ filter_rule_id = params[:content_view_filter_rule_id]
210
+
211
+ if filter_rule_id
212
+ @filter_rule = filter_rule_class_name.constantize.find_by(:id => filter_rule_id)
213
+
214
+ unless @filter_rule
215
+ fail HttpErrors::NotFound, _("Couldn't find %{type} Filter with id %{id}") %
216
+ {:type => resource_name, :id => filter_rule_id}
217
+ end
218
+ end
219
+ end
220
+
196
221
  def resource_class
197
222
  "Katello::#{controller_name.classify}".constantize
198
223
  end
@@ -205,6 +230,10 @@ module Katello
205
230
  "Katello::ContentView#{controller_name.classify}Filter"
206
231
  end
207
232
 
233
+ def filter_rule_class_name
234
+ "Katello::ContentView#{controller_name.classify}FilterRule"
235
+ end
236
+
208
237
  def resource_name(_i18n = true)
209
238
  case resource_class.to_s
210
239
  when "Katello::Erratum"
@@ -213,6 +242,8 @@ module Katello
213
242
  _("Deb Package")
214
243
  when "Katello::Rpm"
215
244
  _("Package")
245
+ when "Katello::Srpm"
246
+ _("Source RPM")
216
247
  when "Katello::PackageGroup"
217
248
  _("Package Group")
218
249
  when "Katello::PuppetModule"
@@ -248,5 +248,17 @@ module Katello
248
248
  end
249
249
  view_options
250
250
  end
251
+
252
+ def content_host_overview_button(host)
253
+ return [] unless host.content_facet || host.subscription_facet
254
+ [{
255
+ :button => link_to(
256
+ _('Content'),
257
+ "/content_hosts/#{host.id}",
258
+ :title => _("Host content and subscription details"),
259
+ :class => 'btn btn-default'),
260
+ :priority => 900
261
+ }]
262
+ end
251
263
  end
252
264
  end
@@ -0,0 +1,55 @@
1
+ module Actions
2
+ module Katello
3
+ module CapsuleContent
4
+ module RefreshRepos
5
+ def fetch_proxy_service(_smart_proxy)
6
+ fail NotImplementedError
7
+ end
8
+
9
+ def act_on_repo?(_repo)
10
+ fail NotImplementedError
11
+ end
12
+
13
+ def plan(smart_proxy, options = {})
14
+ plan_self(:smart_proxy_id => smart_proxy.id,
15
+ :environment_id => options[:environment]&.id,
16
+ :content_view_id => options[:content_view]&.id,
17
+ :repository_id => options[:repository]&.id)
18
+ end
19
+
20
+ def invoke_external_task
21
+ tasks = []
22
+ environment = ::Katello::KTEnvironment.find_by(:id => input[:environment_id]) if input[:environment_id]
23
+ repository = ::Katello::Repository.find_by(:id => input[:repository_id]) if input[:repository_id]
24
+ if repository.nil? && input[:repository_id]
25
+ repository = ::Katello::ContentViewPuppetEnvironment.find(input[:repository_id])
26
+ repository = repository.nonpersisted_repository
27
+ end
28
+ content_view = ::Katello::ContentView.find_by(:id => input[:content_view_id]) if input[:content_view_id]
29
+ smart_proxy = SmartProxy.unscoped.find(input[:smart_proxy_id])
30
+ smart_proxy_helper = ::Katello::SmartProxyHelper.new(smart_proxy)
31
+ smart_proxy_service = fetch_proxy_service(smart_proxy)
32
+
33
+ current_repos_on_capsule = smart_proxy_service.current_repositories(environment, content_view)
34
+ current_repos_on_capsule_ids = current_repos_on_capsule.pluck(:id)
35
+
36
+ list_of_repos_to_sync = smart_proxy_helper.repos_available_to_capsule(environment, content_view, repository)
37
+ list_of_repos_to_sync.each do |repo|
38
+ if repo.is_a?(Katello::ContentViewPuppetEnvironment)
39
+ repo = repo.nonpersisted_repository
40
+ end
41
+ next unless act_on_repo?(repo, smart_proxy)
42
+
43
+ pulp_repo = repo.backend_service(smart_proxy)
44
+ if !current_repos_on_capsule_ids.include?(repo.id)
45
+ pulp_repo.create_mirror_entities
46
+ elsif pulp_repo.mirror_needs_updates?
47
+ tasks += pulp_repo.refresh_mirror_entities
48
+ end
49
+ end
50
+ tasks
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -15,85 +15,34 @@ module Actions
15
15
  end
16
16
 
17
17
  def humanized_input
18
- ["'#{input['smart_proxy']['name']}'"] + super
18
+ input['smart_proxy'].nil? || input['smart_proxy']['name'].nil? ? super : ["'#{input['smart_proxy']['name']}'"] + super
19
19
  end
20
20
 
21
21
  # rubocop:disable MethodLength
22
22
  def plan(smart_proxy, options = {})
23
23
  action_subject(smart_proxy)
24
- smart_proxy_service = ::Katello::Pulp::SmartProxyRepository.new(smart_proxy)
25
- smart_proxy.ping_pulp
26
24
  smart_proxy.verify_ueber_certs
27
-
28
25
  environment_id = options.fetch(:environment_id, nil)
29
26
  environment = ::Katello::KTEnvironment.find(environment_id) if environment_id
30
27
  repository_id = options.fetch(:repository_id, nil)
31
28
  repository = ::Katello::Repository.find(repository_id) if repository_id
32
29
  content_view_id = options.fetch(:content_view_id, nil)
33
30
  content_view = ::Katello::ContentView.find(content_view_id) if content_view_id
34
- skip_metadata_check = options.fetch(:skip_metadata_check, false)
35
31
 
36
32
  fail _("Action not allowed for the default smart proxy.") if smart_proxy.pulp_master?
37
33
 
38
- repository_ids = smart_proxy_service.get_repository_ids(environment, content_view, repository)
39
- # Create a list of non-puppet repos to sync first, and then sync puppet repos last.
40
- # Puppet modules may refer to non-puppet content in the same CV, and thus need to publish last.
41
- puppet_repository_ids = []
42
- non_puppet_repository_ids = []
43
- repository_ids.each do |repo_id|
44
- repo = ::Katello::Repository.find_by(pulp_id: repo_id) || ::Katello::ContentViewPuppetEnvironment.find_by(pulp_id: repo_id)
45
- repo.content_type == 'puppet' ? puppet_repository_ids << repo_id : non_puppet_repository_ids << repo_id
46
- end
47
-
48
- unless repository_ids.blank?
49
- sequence do
50
- options = {}
51
- options[:environment_id] = environment_id if environment_id
52
- options[:content_view_id] = content_view_id if content_view_id
53
- options[:repository_id] = repository_id if repository_id
54
-
55
- plan_action(Pulp::Repository::RefreshNeeded, smart_proxy, options)
56
- plan_action(CreateRepos, smart_proxy, environment, content_view, repository)
57
- sync_repos_to_capsule(smart_proxy_service, non_puppet_repository_ids, skip_metadata_check) unless non_puppet_repository_ids.blank?
58
- sync_repos_to_capsule(smart_proxy_service, puppet_repository_ids, skip_metadata_check) unless puppet_repository_ids.blank?
59
- end
60
- end
61
- end
62
-
63
- def sync_repos_to_capsule(smart_proxy_service, repository_ids, skip_metadata_check)
64
- concurrence do
65
- repository_ids.each do |repo_id|
66
- sequence do
67
- repo = ::Katello::Repository.find_by(pulp_id: repo_id) ||
68
- ::Katello::ContentViewPuppetEnvironment.find_by(pulp_id: repo_id)
69
- if repo && ['yum', 'puppet'].exclude?(repo.content_type)
70
- # we unassociate units in non-yum/puppet repos in order to avoid version conflicts
71
- # during publish. (i.e. two versions of a unit in the same repo)
72
- plan_action(Pulp::Consumer::UnassociateUnits,
73
- capsule_id: smart_proxy_service.smart_proxy.id,
74
- repo_pulp_id: repo_id)
75
- end
76
- pulp_options = { remove_missing: repo && ["deb", "puppet", "yum"].include?(repo.content_type) }
77
- pulp_options[:force_full] = true if skip_metadata_check && repo.content_type == "yum"
78
- plan_action(Pulp::Consumer::SyncCapsule,
79
- capsule_id: smart_proxy_service.smart_proxy.id,
80
- repo_pulp_id: repo_id,
81
- sync_options: pulp_options)
82
- if skip_metadata_check
83
- plan_action(Katello::Repository::MetadataGenerate,
84
- repo,
85
- capsule_id: smart_proxy_service.smart_proxy.id,
86
- force: true)
87
- end
88
- if repo.is_a?(::Katello::Repository) &&
89
- repo.distribution_bootable? &&
90
- repo.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND
91
- plan_action(Katello::Repository::FetchPxeFiles,
92
- id: repo.id,
93
- capsule_id: smart_proxy_service.smart_proxy.id)
94
- end
95
- end
96
- end
34
+ smart_proxy_helper = ::Katello::SmartProxyHelper.new(smart_proxy)
35
+ repositories = smart_proxy_helper.repos_available_to_capsule(environment, content_view, repository)
36
+ smart_proxy.ping_pulp3 if repositories.any? { |repo| smart_proxy.pulp3_support?(repo) }
37
+ smart_proxy.ping_pulp if repositories.any? { |repo| !smart_proxy.pulp3_support?(repo) }
38
+
39
+ refresh_options = options.merge(content_view: content_view,
40
+ environment: environment,
41
+ repository: repository)
42
+ sequence do
43
+ plan_action(Actions::Pulp::Orchestration::Repository::RefreshRepos, smart_proxy, refresh_options)
44
+ plan_action(Actions::Pulp3::Orchestration::Repository::RefreshRepos, smart_proxy, refresh_options) if smart_proxy.pulp3_enabled?
45
+ plan_action(SyncCapsule, smart_proxy, refresh_options)
97
46
  end
98
47
  end
99
48
 
@@ -0,0 +1,40 @@
1
+ module Actions
2
+ module Katello
3
+ module CapsuleContent
4
+ class SyncCapsule < ::Actions::EntryAction
5
+ include Actions::Katello::PulpSelector
6
+
7
+ # rubocop:disable MethodLength
8
+ def plan(smart_proxy, options = {})
9
+ action_subject(smart_proxy)
10
+ environment = options[:environment]
11
+ content_view = options[:content_view]
12
+ repository = options[:repository]
13
+ skip_metadata_check = options.fetch(:skip_metadata_check, false)
14
+
15
+ smart_proxy_helper = ::Katello::SmartProxyHelper.new(smart_proxy)
16
+ concurrence do
17
+ smart_proxy_helper.repos_available_to_capsule(environment, content_view, repository).each do |repo|
18
+ plan_pulp_action([Actions::Pulp::Orchestration::Repository::SmartProxySync,
19
+ Actions::Pulp3::CapsuleContent::Sync],
20
+ repo, smart_proxy,
21
+ skip_metadata_check: skip_metadata_check)
22
+
23
+ if repo.is_a?(::Katello::Repository) &&
24
+ repo.distribution_bootable? &&
25
+ repo.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND
26
+ plan_action(Katello::Repository::FetchPxeFiles,
27
+ id: repo.id,
28
+ capsule_id: smart_proxy.id)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def rescue_strategy
35
+ Dynflow::Action::Rescue::Skip
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -76,9 +76,6 @@ module Actions
76
76
  attrs[:metadata] = metadata
77
77
  end
78
78
  end
79
-
80
- output[:content_view_id] = input[:content_view_id]
81
- output[:content_view_version_id] = input[:content_view_version_id]
82
79
  end
83
80
 
84
81
  def rescue_strategy_for_self
@@ -4,9 +4,7 @@ module Actions
4
4
  class Destroy < Actions::EntryAction
5
5
  def plan(puppet_env)
6
6
  action_subject(puppet_env)
7
- if ::Katello::RepositoryTypeManager.enabled?('puppet')
8
- plan_action(Pulp::Repository::Destroy, content_view_puppet_environment_id: puppet_env.id)
9
- end
7
+ plan_action(Pulp::Repository::Destroy, content_view_puppet_environment_id: puppet_env.id)
10
8
  plan_self
11
9
  end
12
10
 
@@ -0,0 +1,21 @@
1
+ module Actions
2
+ module Katello
3
+ module OrphanCleanup
4
+ class RemoveOrphans < Pulp::Abstract
5
+ input_format do
6
+ param :capsule_id
7
+ end
8
+ def plan(proxy)
9
+ sequence do
10
+ plan_action(Actions::Pulp::Orchestration::OrphanCleanup::RemoveOrphans, proxy)
11
+ if proxy.pulp3_enabled?
12
+ plan_action(
13
+ Actions::Pulp3::Orchestration::OrphanCleanup::RemoveOrphans,
14
+ proxy)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -10,6 +10,14 @@ module Actions
10
10
 
11
11
  action_subject(repository)
12
12
 
13
+ if repository.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_BACKGROUND
14
+ ::Foreman::Deprecation.api_deprecation_warning("Background download_policy will be removed in Katello 3.16. Any background repositories will be converted to Immediate")
15
+ end
16
+
17
+ if root['content_type'] == 'puppet' || root['content_type'] == 'ostree'
18
+ ::Foreman::Deprecation.api_deprecation_warning("Repository types of 'Puppet' and 'OSTree' will no longer be supported in Katello 3.16.")
19
+ end
20
+
13
21
  org = repository.organization
14
22
  pulp2_create_action = plan_create ? Actions::Pulp::Repository::CreateInPlan : Actions::Pulp::Repository::Create
15
23
  sequence do