katello 3.17.0.rc1 → 3.17.0.rc2

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +5 -3
  3. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +1 -1
  4. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +2 -2
  5. data/app/controllers/katello/api/v2/api_controller.rb +1 -1
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +1 -1
  7. data/app/controllers/katello/api/v2/content_uploads_controller.rb +5 -5
  8. data/app/controllers/katello/api/v2/content_view_repositories_controller.rb +47 -0
  9. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +50 -19
  10. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +1 -1
  11. data/app/controllers/katello/api/v2/host_tracer_controller.rb +0 -5
  12. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +15 -0
  13. data/app/controllers/katello/api/v2/repositories_controller.rb +24 -14
  14. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  15. data/app/controllers/katello/concerns/api/v2/{associations_permission_check.rb → authorization.rb} +20 -2
  16. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +11 -5
  17. data/app/helpers/katello/content_view_helper.rb +1 -1
  18. data/app/lib/actions/candlepin/product/content_add.rb +1 -2
  19. data/app/lib/actions/katello/capsule_content/refresh_repos.rb +1 -1
  20. data/app/lib/actions/katello/capsule_content/sync.rb +2 -2
  21. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +17 -3
  22. data/app/lib/actions/katello/content_view/capsule_sync.rb +1 -1
  23. data/app/lib/actions/katello/content_view/destroy.rb +2 -2
  24. data/app/lib/actions/katello/content_view/incremental_updates.rb +1 -1
  25. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -0
  26. data/app/lib/actions/katello/content_view/publish.rb +12 -7
  27. data/app/lib/actions/katello/content_view_puppet_environment/clone.rb +1 -1
  28. data/app/lib/actions/katello/content_view_puppet_environment/create.rb +2 -2
  29. data/app/lib/actions/katello/content_view_version/incremental_update.rb +4 -4
  30. data/app/lib/actions/katello/organization/manifest_delete.rb +1 -0
  31. data/app/lib/actions/katello/organization/manifest_import.rb +1 -0
  32. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -0
  33. data/app/lib/actions/katello/product/content_create.rb +3 -3
  34. data/app/lib/actions/katello/product/destroy.rb +25 -4
  35. data/app/lib/actions/katello/repository/clone_contents.rb +3 -3
  36. data/app/lib/actions/katello/repository/clone_to_environment.rb +2 -2
  37. data/app/lib/actions/katello/repository/clone_to_version.rb +1 -1
  38. data/app/lib/actions/katello/repository/create.rb +1 -1
  39. data/app/lib/actions/katello/repository/destroy.rb +10 -4
  40. data/app/lib/actions/katello/repository/export.rb +3 -3
  41. data/app/lib/actions/katello/repository/finish_upload.rb +2 -2
  42. data/app/lib/actions/katello/repository/import_upload.rb +3 -3
  43. data/app/lib/actions/katello/repository/metadata_generate.rb +1 -1
  44. data/app/lib/actions/katello/repository/multi_clone_contents.rb +6 -10
  45. data/app/lib/actions/katello/repository/purge_empty_content.rb +1 -1
  46. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  47. data/app/lib/actions/katello/repository/sync.rb +35 -25
  48. data/app/lib/actions/katello/repository/update.rb +30 -19
  49. data/app/lib/actions/katello/repository/update_http_proxy_details.rb +1 -1
  50. data/app/lib/actions/katello/repository/update_metadata_sync.rb +1 -1
  51. data/app/lib/actions/katello/repository/upload_files.rb +2 -2
  52. data/app/lib/actions/katello/repository/verify_checksum.rb +28 -0
  53. data/app/lib/actions/pulp/content_view_puppet_environment/copy_contents.rb +1 -1
  54. data/app/lib/actions/pulp/orchestration/orphan_cleanup/remove_orphans.rb +1 -1
  55. data/app/lib/actions/pulp/orchestration/repository/sync.rb +2 -1
  56. data/app/lib/actions/pulp/repository/copy_all_units.rb +1 -1
  57. data/app/lib/actions/pulp/repository/copy_units.rb +1 -1
  58. data/app/lib/actions/pulp/repository/create.rb +1 -1
  59. data/app/lib/actions/pulp/repository/destroy.rb +1 -1
  60. data/app/lib/actions/pulp/repository/remove_units.rb +2 -2
  61. data/app/lib/actions/pulp/repository/sync.rb +3 -2
  62. data/app/lib/actions/pulp3/capsule_content/sync.rb +3 -1
  63. data/app/lib/actions/pulp3/content_guard/refresh_all_distributions.rb +19 -0
  64. data/app/lib/actions/pulp3/content_migration.rb +3 -3
  65. data/app/lib/actions/pulp3/content_view_version/create_exporter.rb +20 -0
  66. data/app/lib/actions/pulp3/content_view_version/destroy_exporter.rb +16 -0
  67. data/app/lib/actions/pulp3/content_view_version/export.rb +19 -0
  68. data/app/lib/actions/pulp3/import_migration.rb +3 -3
  69. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +69 -0
  70. data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +1 -2
  71. data/app/lib/actions/pulp3/orchestration/repository/create.rb +1 -1
  72. data/app/lib/actions/pulp3/orchestration/repository/sync.rb +3 -1
  73. data/app/lib/actions/pulp3/orchestration/repository/trigger_update_repo_cert_guard.rb +22 -0
  74. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +1 -1
  75. data/app/lib/actions/pulp3/repository/copy_content.rb +0 -1
  76. data/app/lib/actions/pulp3/repository/multi_copy_units.rb +2 -2
  77. data/app/lib/actions/pulp3/repository/presenters/repair_presenter.rb +85 -0
  78. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +11 -5
  79. data/app/lib/actions/pulp3/repository/repair.rb +29 -0
  80. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -1
  81. data/app/lib/actions/pulp3/repository/save_distribution_references.rb +2 -2
  82. data/app/lib/actions/pulp3/repository/save_version.rb +20 -16
  83. data/app/lib/actions/pulp3/repository/save_versions.rb +1 -1
  84. data/app/lib/actions/pulp3/repository/sync.rb +1 -1
  85. data/app/lib/actions/pulp3/repository/update_cv_repository_cert_guard.rb +6 -2
  86. data/app/lib/actions/pulp3/repository/upload_file.rb +2 -2
  87. data/app/lib/katello/concerns/base_template_scope_extensions.rb +5 -3
  88. data/app/lib/katello/concerns/permission_extensions.rb +14 -0
  89. data/app/lib/katello/foreman.rb +1 -1
  90. data/app/lib/katello/resources/candlepin/product.rb +0 -11
  91. data/app/lib/katello/resources/registry.rb +3 -3
  92. data/app/models/katello/authorization/content_view_version_export_history.rb +11 -0
  93. data/app/models/katello/authorization/product.rb +4 -0
  94. data/app/models/katello/authorization/repository.rb +8 -0
  95. data/app/models/katello/concerns/content_facet_host_extensions.rb +2 -1
  96. data/app/models/katello/concerns/organization_extensions.rb +6 -1
  97. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  98. data/app/models/katello/concerns/redhat_extensions.rb +4 -2
  99. data/app/models/katello/concerns/smart_proxy_extensions.rb +33 -16
  100. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +1 -1
  101. data/app/models/katello/content_view.rb +1 -1
  102. data/app/models/katello/content_view_package_filter.rb +1 -1
  103. data/app/models/katello/content_view_puppet_environment.rb +1 -1
  104. data/app/models/katello/content_view_version.rb +3 -1
  105. data/app/models/katello/content_view_version_export_history.rb +22 -0
  106. data/app/models/katello/docker_meta_tag.rb +1 -1
  107. data/app/models/katello/errata_status.rb +21 -12
  108. data/app/models/katello/erratum.rb +1 -1
  109. data/app/models/katello/glue/candlepin/owner.rb +4 -2
  110. data/app/models/katello/glue/pulp/repo.rb +3 -1
  111. data/app/models/katello/host/content_facet.rb +8 -0
  112. data/app/models/katello/kt_environment.rb +1 -1
  113. data/app/models/katello/package_group.rb +1 -1
  114. data/app/models/katello/ping.rb +8 -3
  115. data/app/models/katello/pulp3/content_guard.rb +1 -1
  116. data/app/models/katello/purpose_status.rb +2 -2
  117. data/app/models/katello/repository.rb +23 -15
  118. data/app/models/katello/rhsm_fact_parser.rb +1 -1
  119. data/app/models/katello/root_repository.rb +2 -15
  120. data/app/models/katello/sync_plan.rb +8 -0
  121. data/app/models/setting/content.rb +3 -1
  122. data/app/services/cert/certs.rb +10 -2
  123. data/app/services/katello/candlepin/event_handler.rb +1 -0
  124. data/app/services/katello/host_status_manager.rb +7 -0
  125. data/app/services/katello/pulp/content.rb +1 -1
  126. data/app/services/katello/pulp/repository.rb +7 -7
  127. data/app/services/katello/pulp/repository/deb.rb +2 -2
  128. data/app/services/katello/pulp/repository/docker.rb +5 -5
  129. data/app/services/katello/pulp/repository/file.rb +2 -2
  130. data/app/services/katello/pulp/repository/ostree.rb +2 -2
  131. data/app/services/katello/pulp/repository/puppet.rb +2 -2
  132. data/app/services/katello/pulp/repository/yum.rb +5 -6
  133. data/app/services/katello/pulp/smart_proxy_repository.rb +1 -1
  134. data/app/services/katello/pulp3/ansible_collection.rb +2 -2
  135. data/app/services/katello/pulp3/api/core.rb +16 -0
  136. data/app/services/katello/pulp3/content.rb +3 -3
  137. data/app/services/katello/pulp3/content_view_version/export.rb +71 -0
  138. data/app/services/katello/pulp3/distribution.rb +2 -2
  139. data/app/services/katello/pulp3/docker_blob.rb +2 -2
  140. data/app/services/katello/pulp3/docker_manifest.rb +2 -2
  141. data/app/services/katello/pulp3/docker_manifest_list.rb +2 -2
  142. data/app/services/katello/pulp3/docker_tag.rb +2 -2
  143. data/app/services/katello/pulp3/erratum.rb +2 -2
  144. data/app/services/katello/pulp3/file_unit.rb +2 -2
  145. data/app/services/katello/pulp3/migration.rb +139 -34
  146. data/app/services/katello/pulp3/migration_plan.rb +50 -14
  147. data/app/services/katello/pulp3/migration_switchover.rb +41 -9
  148. data/app/services/katello/pulp3/module_stream.rb +2 -2
  149. data/app/services/katello/pulp3/package_group.rb +2 -2
  150. data/app/services/katello/pulp3/repository.rb +9 -9
  151. data/app/services/katello/pulp3/repository/docker.rb +18 -10
  152. data/app/services/katello/pulp3/repository/yum.rb +25 -13
  153. data/app/services/katello/pulp3/repository_mirror.rb +2 -1
  154. data/app/services/katello/pulp3/rpm.rb +2 -2
  155. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +2 -2
  156. data/app/services/katello/pulp3/smart_proxy_repository.rb +1 -1
  157. data/app/services/katello/pulp3/srpm.rb +2 -2
  158. data/app/services/katello/pulp3/task_group.rb +1 -1
  159. data/app/services/katello/pulp3/yum_metadata_file.rb +2 -2
  160. data/app/services/katello/registration_manager.rb +9 -3
  161. data/app/services/katello/repository_type.rb +1 -1
  162. data/app/services/katello/smart_proxy_helper.rb +14 -17
  163. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +10 -2
  164. data/app/views/katello/api/v2/content_view_repositories/show_all.json.rabl +8 -0
  165. data/app/views/katello/api/v2/content_view_version_export_histories/index.json.rabl +7 -0
  166. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +13 -0
  167. data/app/views/katello/api/v2/package_groups/show.json.rabl +1 -1
  168. data/app/views/katello/api/v2/packages/show.json.rabl +1 -1
  169. data/app/views/katello/api/v2/repositories/base.json.rabl +2 -1
  170. data/app/views/katello/api/v2/srpms/show.json.rabl +1 -1
  171. data/app/views/katello/api/v2/sync_plans/show.json.rabl +2 -1
  172. data/config/routes/api/rhsm.rb +1 -0
  173. data/config/routes/api/v2.rb +8 -1
  174. data/db/migrate/20200818040551_add_content_view_version_export_history.rb +13 -0
  175. data/db/migrate/20200818192230_update_system_purpose_status.rb +12 -0
  176. data/db/migrate/20200820145217_add_download_concurrency_to_katello_root_repositories.rb +5 -0
  177. data/db/migrate/20200910140340_remove_distribution_uuid.rb +5 -0
  178. data/db/migrate/20200914200906_remove_auto_enabled.rb +5 -0
  179. data/engines/bastion/app/assets/javascripts/bastion/bastion.js +1 -0
  180. data/engines/bastion/app/assets/javascripts/bastion/routing.module.js +1 -1
  181. data/engines/bastion/vendor/assets/javascripts/bastion/angular-ui-router/stateEvents.js +300 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.controller.js +1 -1
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-add-subscriptions.controller.js +1 -1
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +1 -1
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-subscriptions.controller.js +1 -1
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +1 -1
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-host-collections-modal.controller.js +1 -1
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-module-streams-modal.controller.js +1 -1
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-repository-sets-modal.controller.js +1 -1
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-subscriptions-modal.controller.js +1 -1
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js +1 -1
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js +1 -1
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +1 -1
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-installed.controller.js +1 -1
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +1 -1
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +1 -1
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-applicable.controller.js +1 -1
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -1
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +1 -1
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-host-collections.controller.js +1 -1
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-subscriptions.controller.js +1 -1
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +4 -2
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-host-collections.controller.js +1 -1
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-subscriptions.controller.js +1 -1
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +1 -1
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +1 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +1 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +1 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +1 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +1 -1
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +1 -1
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +1 -1
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +1 -1
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +1 -1
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-module-names.controller.js +1 -1
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-module-versions.controller.js +1 -1
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-modules.controller.js +1 -1
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +1 -1
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +1 -1
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-content-views.controller.js +1 -1
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-repositories.controller.js +1 -1
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +1 -1
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-repositories.controller.js +1 -1
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-content-views.controller.js +1 -1
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-repositories.controller.js +1 -1
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/files.controller.js +1 -1
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/host-collections.controller.js +1 -1
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +57 -12
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +45 -8
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +42 -5
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +36 -0
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +36 -0
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +36 -0
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +45 -8
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +36 -0
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +36 -0
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +36 -0
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +4 -4
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/fenced-pages.service.js +11 -2
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/organization-selector.controller.js +5 -14
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branch-repositories.controller.js +1 -1
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package-repositories.controller.js +1 -1
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -1
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/product-bulk-action.factory.js +1 -0
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/products-bulk-sync-plan-modal.controller.js +1 -1
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +1 -1
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +1 -1
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +6 -0
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +7 -1
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +0 -9
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +1 -1
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +0 -11
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository.factory.js +1 -0
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +16 -1
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/views/products.html +6 -0
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/details/puppet-module-content-views.controller.js +1 -1
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/details/puppet-module-repositories.controller.js +1 -1
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/puppet-modules.controller.js +1 -1
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details-info.controller.js +4 -3
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/sync-plans.controller.js +1 -1
  265. data/lib/katello/engine.rb +2 -0
  266. data/lib/katello/permission_creator.rb +14 -9
  267. data/lib/katello/tasks/clean_published_repo_directories.rake +3 -3
  268. data/lib/katello/tasks/pulp3_content_switchover.rake +24 -6
  269. data/lib/katello/tasks/pulp3_migration.rake +4 -2
  270. data/lib/katello/tasks/pulp3_post_migration_check.rake +2 -2
  271. data/lib/katello/tasks/reimport.rake +1 -1
  272. data/lib/katello/tasks/repository.rake +15 -2
  273. data/lib/katello/tasks/unify_hosts.rake +1 -0
  274. data/lib/katello/tasks/upgrades/3.11/update_puppet_repos.rake +3 -3
  275. data/lib/katello/tasks/upgrades/3.12/remove_pulp2_notifier.rake +2 -2
  276. data/lib/katello/tasks/upgrades/3.8/clear_checksum_type.rake +2 -2
  277. data/lib/katello/version.rb +1 -1
  278. data/locale/action_names.rb +47 -47
  279. data/locale/katello.pot +160 -160
  280. data/webpack/containers/Application/config.js +4 -4
  281. data/webpack/redux/actions/RedHatRepositories/helpers.js +1 -1
  282. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +22 -32
  283. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +0 -14
  284. data/webpack/scenes/Subscriptions/Manifest/index.js +2 -5
  285. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +15 -6
  286. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +0 -1
  287. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +3 -0
  288. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +24 -0
  289. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsReducer.test.js.snap +114 -26
  290. metadata +67 -33
  291. data/app/lib/actions/candlepin/product/content_update_enablement.rb +0 -18
  292. data/app/lib/actions/katello/repository/content_update.rb +0 -41
  293. data/app/lib/actions/katello/repository/update_cv_repo_cert_guard.rb +0 -17
@@ -13,7 +13,7 @@ module Actions
13
13
 
14
14
  output.merge!(contents_changed: false, updated_repositories: [])
15
15
  repositories.each do |repo|
16
- repo_backend_service = repo.backend_service(SmartProxy.pulp_master)
16
+ repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
17
17
  if repo.version_href
18
18
  # Chop off the version number to compare base repo strings
19
19
  unversioned_href = repo.version_href[0..-2].rpartition('/').first
@@ -10,7 +10,7 @@ module Actions
10
10
 
11
11
  def invoke_external_task
12
12
  repo = ::Katello::Repository.find(input[:repo_id])
13
- output[:pulp_tasks] = repo.backend_service(::SmartProxy.unscoped.find(input[:smart_proxy_id])).sync
13
+ output[:pulp_tasks] = repo.backend_service(::SmartProxy.unscoped.find(input[:smart_proxy_id])).sync(input[:options])
14
14
  end
15
15
 
16
16
  def external_task=(tasks)
@@ -2,13 +2,17 @@ module Actions
2
2
  module Pulp3
3
3
  module Repository
4
4
  class UpdateCVRepositoryCertGuard < Pulp3::Abstract
5
- def plan(repository, _smart_proxy)
5
+ def plan(repository, smart_proxy)
6
6
  root = repository.root
7
7
  cv_repositories = root.repositories - [root.library_instance]
8
8
  cv_repositories.each do |repo|
9
- plan_action(::Actions::Pulp3::Repository::RefreshDistribution, repo, SmartProxy.pulp_master)
9
+ plan_action(::Actions::Pulp3::Repository::RefreshDistribution, repo, smart_proxy)
10
10
  end
11
11
  end
12
+
13
+ def humanized_name
14
+ _("Updating repository authentication configuration")
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -24,8 +24,8 @@ module Actions
24
24
  filechunk.write(chunk)
25
25
  filechunk.flush
26
26
  actual_chunk_size = File.size(filechunk)
27
- response = uploads_api.update(upload_href, content_range(offset, offset + actual_chunk_size - 1, total_size), filechunk)
28
- offset += actual_chunk_size - 1
27
+ response = uploads_api.update(content_range(offset, offset + actual_chunk_size - 1, total_size), upload_href, filechunk)
28
+ offset += actual_chunk_size
29
29
  ensure
30
30
  filechunk.close
31
31
  filechunk.unlink
@@ -87,7 +87,7 @@ module Katello
87
87
  end
88
88
 
89
89
  # rubocop:disable Metrics/MethodLength
90
- def load_errata_applications(filter_errata_type: nil, include_last_reboot: 'yes', since: nil, up_to: nil, status: nil)
90
+ def load_errata_applications(filter_errata_type: nil, include_last_reboot: 'yes', since: nil, up_to: nil, status: nil, host_filter: nil)
91
91
  result = []
92
92
 
93
93
  filter_errata_type = filter_errata_type.presence || 'all'
@@ -109,6 +109,7 @@ module Katello
109
109
  select: 'foreman_tasks_tasks.*,template_invocations.id AS template_invocation_id',
110
110
  search: search
111
111
  )
112
+ only_host_ids = ::Host.search_for(host_filter).pluck(:id) if host_filter
112
113
 
113
114
  # batch of 1_000 records
114
115
  tasks.each do |batch|
@@ -118,14 +119,15 @@ module Katello
118
119
 
119
120
  batch.each do |task|
120
121
  seen_errata_ids = (seen_errata_ids + parse_errata(task)).uniq
121
- seen_host_ids << task.input['host']['id'] if include_last_reboot == 'yes'
122
+ seen_host_ids << task.input['host']['id'].to_i if include_last_reboot == 'yes'
122
123
  end
123
124
 
124
125
  # preload errata in one query for this batch
125
126
  preloaded_errata = Katello::Erratum.where(:errata_id => seen_errata_ids).pluck(:errata_id, :errata_type)
126
- preloaded_hosts = ::Host.where(:id => seen_host_ids).includes(:reported_data)
127
+ preloaded_hosts = ::Host.where(:id => seen_host_ids & only_host_ids).includes(:reported_data)
127
128
 
128
129
  batch.each do |task|
130
+ next unless only_host_ids.include?(task.input['host']['id'].to_i)
129
131
  parse_errata(task).each do |erratum_id|
130
132
  current_erratum_errata_type = preloaded_errata.find { |k, _| k == erratum_id }.last
131
133
 
@@ -0,0 +1,14 @@
1
+ module Katello
2
+ module Concerns
3
+ module PermissionExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ attr_accessor :finder_scope
7
+
8
+ def initialize(name, hash, options)
9
+ super(name, hash, options)
10
+ @finder_scope = options[:finder_scope]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -21,7 +21,7 @@ module Katello
21
21
  foreman_environment.save!
22
22
  end
23
23
 
24
- foreman_smart_proxy = SmartProxy.pulp_master
24
+ foreman_smart_proxy = SmartProxy.pulp_primary
25
25
  if foreman_smart_proxy.has_feature?('Puppet')
26
26
  PuppetClassImporter.new(:url => foreman_smart_proxy.url, :env => foreman_environment.name).update_environment
27
27
  end
@@ -66,17 +66,6 @@ module Katello
66
66
  self.post(join_path(path(owner_label, product_id), "content/#{content_id}?enabled=#{enabled}"), nil, self.default_headers).code.to_i
67
67
  end
68
68
 
69
- def update_enabled(owner_label, product_id, contents)
70
- options = { id: product_id }
71
- options[:productContent] = contents.map do |content|
72
- ret = { content: { id: content[:id] } }
73
- ret[:enabled] = content[:enabled] if content.key?(:enabled)
74
- ret
75
- end
76
-
77
- update(owner_label, options)
78
- end
79
-
80
69
  def remove_content(owner_label, product_id, content_id)
81
70
  self.delete(join_path(path(owner_label, product_id), "content/#{content_id}"), self.default_headers).code.to_i
82
71
  end
@@ -24,11 +24,11 @@ module Katello
24
24
  def load_class
25
25
  container_config = SETTINGS.dig(:katello, :container_image_registry)
26
26
  registry_url = nil
27
- pulp_master = ::SmartProxy.pulp_master
27
+ pulp_primary = ::SmartProxy.pulp_primary
28
28
 
29
29
  # Pulp 3 has its own registry
30
- if pulp_master&.pulp3_repository_type_support?(::Katello::Repository::DOCKER_TYPE)
31
- uri = URI(pulp_master.setting(SmartProxy::PULP3_FEATURE, 'content_app_url'))
30
+ if pulp_primary&.pulp3_repository_type_support?(::Katello::Repository::DOCKER_TYPE)
31
+ uri = URI(pulp_primary.setting(SmartProxy::PULP3_FEATURE, 'content_app_url'))
32
32
  uri.path = "/pulpcore_registry/"
33
33
  registry_url = uri.to_s
34
34
 
@@ -0,0 +1,11 @@
1
+ module Katello
2
+ module Authorization::ContentViewVersionExportHistory
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def readable
7
+ where(:content_view_version_id => Katello::ContentViewVersion.readable)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -31,6 +31,10 @@ module Katello
31
31
  authorized(:edit_products)
32
32
  end
33
33
 
34
+ def exportable
35
+ authorized(:export_products)
36
+ end
37
+
34
38
  def deletable
35
39
  authorized(:destroy_products)
36
40
  end
@@ -27,6 +27,10 @@ module Katello
27
27
  joins(:root).where("#{Repository.table_name}.id in (?) or #{self.table_name}.id in (?) or #{self.table_name}.id in (?) or #{self.table_name}.id in (?)", in_products, in_content_views, in_versions, in_environments)
28
28
  end
29
29
 
30
+ def exportable
31
+ in_product(Katello::Product.exportable)
32
+ end
33
+
30
34
  def deletable
31
35
  in_product(Katello::Product.authorized(:destroy_products))
32
36
  end
@@ -34,6 +38,10 @@ module Katello
34
38
  def syncable
35
39
  in_product(Katello::Product.authorized(:sync_products))
36
40
  end
41
+
42
+ def editable
43
+ in_product(Katello::Product.editable)
44
+ end
37
45
  end
38
46
  end
39
47
  end
@@ -28,7 +28,8 @@ module Katello
28
28
  has_one :content_view, :through => :content_facet
29
29
  has_one :lifecycle_environment, :through => :content_facet
30
30
  has_one :content_source, :through => :content_facet
31
- has_many :applicable_errata, :through => :content_facet
31
+ has_many :content_facet_errata, :through => :content_facet, :class_name => 'Katello::ContentFacetErratum'
32
+ has_many :applicable_errata, :through => :content_facet_errata, :source => :erratum
32
33
  has_many :applicable_rpms, :through => :content_facet
33
34
  has_many :applicable_module_streams, :through => :content_facet
34
35
 
@@ -113,7 +113,7 @@ module Katello
113
113
  end
114
114
 
115
115
  def associate_default_capsule
116
- smart_proxy = SmartProxy.pulp_master
116
+ smart_proxy = SmartProxy.pulp_primary
117
117
  smart_proxy.organizations << self if smart_proxy
118
118
  end
119
119
 
@@ -228,6 +228,11 @@ module Katello
228
228
  subscriptions.select(&:expiring_soon?)
229
229
  end
230
230
 
231
+ def clear_syspurpose_status
232
+ host_purpose = HostStatus::Status.where(type: ::Katello::HostStatusManager::PURPOSE_STATUS.map(&:to_s)).where('host_id in (?)', self.hosts.pluck(:id))
233
+ host_purpose.destroy_all
234
+ end
235
+
231
236
  def notification_recipients_ids
232
237
  users = User.unscoped.all.find_all do |user|
233
238
  user.can?(:import_manifest) && user.can?(:view_organizations, self)
@@ -87,7 +87,7 @@ module Katello
87
87
 
88
88
  def import_all(pulp_ids = nil, repository = nil)
89
89
  ids_to_associate = []
90
- service_class = SmartProxy.pulp_master!.content_service(content_type)
90
+ service_class = SmartProxy.pulp_primary!.content_service(content_type)
91
91
  service_class.pulp_units_batch_all(pulp_ids).each do |units|
92
92
  units.each do |unit|
93
93
  unit = unit.with_indifferent_access
@@ -105,7 +105,7 @@ module Katello
105
105
 
106
106
  def import_for_repository(repository)
107
107
  pulp_id_href_map = {}
108
- service_class = SmartProxy.pulp_master!.content_service(content_type)
108
+ service_class = SmartProxy.pulp_primary!.content_service(content_type)
109
109
  fetch_only_ids = !repository.content_view.default? &&
110
110
  !repository.repository_type.unique_content_per_repo &&
111
111
  service_class.supports_id_fetch?
@@ -8,8 +8,10 @@ module Katello
8
8
  os_name = construct_name(repo.distribution_family)
9
9
  major, minor = repo.distribution_version.split('.')
10
10
  minor ||= '' # treat minor versions as empty string to not confuse with nil
11
-
12
- create_os = lambda { ::Redhat.where(:name => os_name, :major => major, :minor => minor).first_or_create! }
11
+ os = ::Redhat.where(:name => os_name, :major => major, :minor => minor).try(:first)
12
+ return os if os
13
+ description = "#{os_name}-#{repo.distribution_version}"
14
+ create_os = lambda { ::Redhat.create!(:name => os_name, :major => major, :minor => minor, :description => description) }
13
15
 
14
16
  begin
15
17
  create_os.call
@@ -64,20 +64,26 @@ module Katello
64
64
  where("#{Katello::CapsuleLifecycleEnvironment.table_name}.lifecycle_environment_id" => repo.environment_id)
65
65
  end
66
66
 
67
- def self.pulp_master
68
- unscoped.with_features(PULP_FEATURE).first
67
+ def self.pulp_primary
68
+ unscoped.with_features(PULP_FEATURE).first || non_mirror_pulp3
69
69
  end
70
70
 
71
- def self.pulp_master!
72
- pulp_master || fail(_("Could not find a smart proxy with pulp feature."))
71
+ def self.non_mirror_pulp3
72
+ found = unscoped.with_features(PULP3_FEATURE).order(:id).select { |proxy| !proxy.setting(PULP3_FEATURE, 'mirror') }
73
+ Rails.logger.warn("Found multiple smart proxies with mirror set to false. This is likely not intentional.") if found.count > 1
74
+ found.first
75
+ end
76
+
77
+ def self.pulp_primary!
78
+ pulp_primary || fail(_("Could not find a smart proxy with pulp feature."))
73
79
  end
74
80
 
75
81
  def self.default_capsule
76
- pulp_master
82
+ pulp_primary
77
83
  end
78
84
 
79
85
  def self.default_capsule!
80
- pulp_master!
86
+ pulp_primary!
81
87
  end
82
88
 
83
89
  def self.with_environment(environment, include_default = false)
@@ -121,8 +127,7 @@ module Katello
121
127
  uri = pulp3_uri!
122
128
  config.host = uri.host
123
129
  config.scheme = uri.scheme
124
- config.ssl_client_cert = ::Cert::Certs.ssl_client_cert
125
- config.ssl_client_key = ::Cert::Certs.ssl_client_key
130
+ pulp3_ssl_configuration(config)
126
131
  config.debugging = true
127
132
  config.logger = ::Foreman::Logging.logger('katello/pulp_rest')
128
133
  config.username = self.setting(PULP3_FEATURE, 'username')
@@ -130,6 +135,18 @@ module Katello
130
135
  end
131
136
  end
132
137
 
138
+ def pulp3_ssl_configuration(config)
139
+ if Faraday.default_adapter == :excon
140
+ config.ssl_client_cert = ::Cert::Certs.ssl_client_cert_filename
141
+ config.ssl_client_key = ::Cert::Certs.ssl_client_key_filename
142
+ elsif Faraday.default_adapter == :net_http
143
+ config.ssl_client_cert = ::Cert::Certs.ssl_client_cert
144
+ config.ssl_client_key = ::Cert::Certs.ssl_client_key
145
+ else
146
+ fail "Unexpected faraday default_adapter #{Faraday.default_adapter}! Cannot continue, this is likely a bug."
147
+ end
148
+ end
149
+
133
150
  def backend_service_type(repository)
134
151
  if pulp3_support?(repository)
135
152
  Actions::Pulp3::Abstract::BACKEND_SERVICE_TYPE
@@ -143,7 +160,7 @@ module Katello
143
160
  end
144
161
 
145
162
  def pulp3_support?(repository)
146
- pulp3_repository_type_support?(repository.content_type)
163
+ repository ? pulp3_repository_type_support?(repository.try(:content_type)) : false
147
164
  end
148
165
 
149
166
  def pulp2_preferred_for_type?(repository_type)
@@ -204,11 +221,11 @@ module Katello
204
221
  end
205
222
 
206
223
  def pulp_mirror?
207
- self.has_feature? PULP_NODE_FEATURE
224
+ self.has_feature?(PULP_NODE_FEATURE) || self.setting(SmartProxy::PULP3_FEATURE, 'mirror')
208
225
  end
209
226
 
210
- def pulp_master?
211
- self.has_feature? PULP_FEATURE
227
+ def pulp_primary?
228
+ self.has_feature?(PULP_FEATURE) || self.setting(SmartProxy::PULP3_FEATURE, 'mirror') == false
212
229
  end
213
230
 
214
231
  def supported_pulp_types
@@ -234,14 +251,14 @@ module Katello
234
251
 
235
252
  #deprecated methods
236
253
  alias_method :pulp_node, :pulp_api
237
- alias_method :default_capsule?, :pulp_master?
254
+ alias_method :default_capsule?, :pulp_primary?
238
255
 
239
256
  def associate_organizations
240
- self.organizations = Organization.all if self.pulp_master?
257
+ self.organizations = Organization.all if self.pulp_primary?
241
258
  end
242
259
 
243
260
  def associate_default_locations
244
- return unless self.pulp_master?
261
+ return unless self.pulp_primary?
245
262
  ['puppet_content', 'subscribed_hosts'].each do |type|
246
263
  default_location = ::Location.unscoped.find_by_title(
247
264
  ::Setting[:"default_location_#{type}"])
@@ -261,7 +278,7 @@ module Katello
261
278
  end
262
279
 
263
280
  def associate_lifecycle_environments
264
- self.lifecycle_environments = Katello::KTEnvironment.all if self.pulp_master?
281
+ self.lifecycle_environments = Katello::KTEnvironment.all if self.pulp_primary?
265
282
  end
266
283
 
267
284
  def add_lifecycle_environment(environment)
@@ -52,7 +52,7 @@ module Katello
52
52
  scoped_search :relation => :activation_keys, :on => :name, :rename => :activation_key, :complete_value => true, :ext_method => :find_by_activation_key
53
53
  scoped_search :relation => :activation_keys, :on => :id, :rename => :activation_key_id, :complete_value => true, :ext_method => :find_by_activation_key_id,
54
54
  :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
55
- scoped_search :on => :hypervisor, :relation => :subscription_facet, :complete_value => { :true => true, :false => false }
55
+ scoped_search :on => :hypervisor, :relation => :subscription_facet, :complete_value => true
56
56
  scoped_search :on => :name, :relation => :hypervisor_host, :complete_value => true, :rename => :hypervisor_host, :ext_method => :find_by_hypervisor_host
57
57
  scoped_search :on => :name, :relation => :subscriptions, :rename => :subscription_name, :complete_value => true, :ext_method => :find_by_subscription_name
58
58
  scoped_search :on => :id, :relation => :pools, :rename => :subscription_id, :complete_value => true, :ext_method => :find_by_subscription_id, :only_explicit => true
@@ -79,7 +79,7 @@ module Katello
79
79
  scoped_search :on => :name, :complete_value => true
80
80
  scoped_search :on => :organization_id, :complete_value => true, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
81
81
  scoped_search :on => :label, :complete_value => true
82
- scoped_search :on => :composite, :complete_value => {true: true, false: false}
82
+ scoped_search :on => :composite, :complete_value => true
83
83
 
84
84
  def self.in_environment(env)
85
85
  joins(:content_view_environments).
@@ -37,7 +37,7 @@ module Katello
37
37
  self.package_rules.each do |rule|
38
38
  package_filenames.concat(query_rpms(repo, rule))
39
39
  end
40
-
40
+ package_filenames.concat(repo.packages_without_errata.map(&:filename)) if self.original_packages
41
41
  rpms = Rpm.in_repositories(repo)
42
42
  rpms.where(filename: package_filenames).where(:modular => false).pluck(:pulp_id).flatten.uniq
43
43
  end
@@ -42,7 +42,7 @@ module Katello
42
42
  false
43
43
  end
44
44
 
45
- def master
45
+ def primary
46
46
  true
47
47
  end
48
48
 
@@ -22,6 +22,9 @@ module Katello
22
22
  has_many :triggered_histories, :class_name => "Katello::ContentViewHistory", :dependent => :destroy,
23
23
  :inverse_of => :triggered_by, :foreign_key => :triggered_by_id
24
24
 
25
+ has_many :export_histories, :class_name => "Katello::ContentViewVersionExportHistory", :dependent => :destroy,
26
+ :inverse_of => :content_view_version, :foreign_key => :content_view_version_id
27
+
25
28
  has_many :repositories, :class_name => "Katello::Repository", :dependent => :destroy
26
29
  has_many :content_view_puppet_environments, :class_name => "Katello::ContentViewPuppetEnvironment",
27
30
  :dependent => :destroy
@@ -41,7 +44,6 @@ module Katello
41
44
  has_many :composites, :through => :content_view_version_composites, :source => :composite_version,
42
45
  :class_name => "Katello::ContentViewVersion", :inverse_of => :components
43
46
  has_many :published_in_composite_content_views, through: :composites, source: :content_view
44
-
45
47
  delegate :default, :default?, to: :content_view
46
48
 
47
49
  validates_lengths_from_database
@@ -0,0 +1,22 @@
1
+ module Katello
2
+ class ContentViewVersionExportHistory < Katello::Model
3
+ include Authorization::ContentViewVersionExportHistory
4
+
5
+ belongs_to :content_view_version, :class_name => "Katello::ContentViewVersion", :inverse_of => :export_histories
6
+ validates_lengths_from_database
7
+ validates :content_view_version_id, :presence => true
8
+ validates :destination_server, :presence => true, :uniqueness => { :scope => [:content_view_version_id, :destination_server, :path] }
9
+
10
+ scope :with_organization_id, ->(organization_id) do
11
+ where(:content_view_version_id => ContentViewVersion.with_organization_id(organization_id))
12
+ end
13
+
14
+ scope :with_content_view_id, ->(cv_id) do
15
+ where(:content_view_version_id => ContentViewVersion.where(content_view_id: cv_id))
16
+ end
17
+
18
+ scoped_search :on => :content_view_id, :relation => :content_view_version, :validator => ScopedSearch::Validators::INTEGER, :only_explicit => true
19
+ scoped_search :on => :content_view_version_id, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
20
+ scoped_search :on => :id, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
21
+ end
22
+ end