katello 3.8.1 → 3.9.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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -7
  3. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +16 -9
  4. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
  5. data/app/controllers/katello/api/v2/api_controller.rb +20 -22
  6. data/app/controllers/katello/api/v2/capsule_content_controller.rb +1 -1
  7. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +5 -1
  8. data/app/controllers/katello/api/v2/content_view_histories_controller.rb +1 -1
  9. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +12 -12
  10. data/app/controllers/katello/api/v2/content_views_controller.rb +15 -1
  11. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -1
  12. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +12 -4
  13. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +12 -0
  14. data/app/controllers/katello/api/v2/module_streams_controller.rb +49 -0
  15. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  16. data/app/controllers/katello/api/v2/package_groups_controller.rb +1 -1
  17. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +5 -4
  18. data/app/controllers/katello/api/v2/products_controller.rb +1 -1
  19. data/app/controllers/katello/api/v2/puppet_modules_controller.rb +5 -0
  20. data/app/controllers/katello/api/v2/repositories_controller.rb +80 -84
  21. data/app/controllers/katello/api/v2/repository_sets_controller.rb +18 -7
  22. data/app/controllers/katello/api/v2/subscriptions_controller.rb +2 -6
  23. data/app/controllers/katello/api/v2/sync_plans_controller.rb +13 -24
  24. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +12 -5
  25. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +2 -5
  26. data/app/controllers/katello/react_controller.rb +2 -0
  27. data/app/controllers/katello/remote_execution_controller.rb +16 -5
  28. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +0 -2
  29. data/app/lib/actions/candlepin/import_pool_handler.rb +40 -15
  30. data/app/lib/actions/katello/capsule_content/create_repos.rb +1 -0
  31. data/app/lib/actions/katello/content_view/publish.rb +21 -2
  32. data/app/lib/actions/katello/content_view_version/incremental_update.rb +1 -1
  33. data/app/lib/actions/katello/environment/destroy.rb +2 -3
  34. data/app/lib/actions/katello/environment/publish_repositories.rb +1 -1
  35. data/app/lib/actions/katello/event_queue/monitor.rb +9 -15
  36. data/app/lib/actions/katello/event_queue/poller_thread.rb +24 -1
  37. data/app/lib/actions/katello/event_queue/suspended_action.rb +2 -2
  38. data/app/lib/actions/katello/host/hypervisors_update.rb +82 -22
  39. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  40. data/app/lib/actions/katello/product/content_create.rb +30 -38
  41. data/app/lib/actions/katello/product/content_destroy.rb +11 -12
  42. data/app/lib/actions/katello/product/create.rb +0 -1
  43. data/app/lib/actions/katello/product/update.rb +0 -2
  44. data/app/lib/actions/katello/repository/clear.rb +2 -0
  45. data/app/lib/actions/katello/repository/clone_to_environment.rb +0 -2
  46. data/app/lib/actions/katello/repository/clone_to_version.rb +15 -3
  47. data/app/lib/actions/katello/repository/clone_yum_content.rb +21 -2
  48. data/app/lib/actions/katello/repository/clone_yum_metadata.rb +1 -1
  49. data/app/lib/actions/katello/repository/correct_checksum.rb +5 -5
  50. data/app/lib/actions/katello/repository/create.rb +7 -7
  51. data/app/lib/actions/katello/repository/create_root.rb +22 -0
  52. data/app/lib/actions/katello/repository/destroy.rb +11 -6
  53. data/app/lib/actions/katello/repository/discover.rb +5 -3
  54. data/app/lib/actions/katello/repository/export.rb +1 -1
  55. data/app/lib/actions/katello/repository/fetch_pxe_files.rb +13 -27
  56. data/app/lib/actions/katello/repository/index_module_streams.rb +16 -0
  57. data/app/lib/actions/katello/repository/metadata_generate.rb +1 -1
  58. data/app/lib/actions/katello/repository/sync.rb +0 -2
  59. data/app/lib/actions/katello/repository/update.rb +15 -28
  60. data/app/lib/actions/katello/repository_set/disable_repository.rb +5 -13
  61. data/app/lib/actions/katello/repository_set/enable_repository.rb +3 -16
  62. data/app/lib/actions/katello/repository_set/scan_cdn.rb +4 -32
  63. data/app/lib/actions/katello/sync_plan/run.rb +37 -0
  64. data/app/lib/actions/pulp/abstract.rb +7 -2
  65. data/app/lib/actions/pulp/abstract_async_task.rb +1 -0
  66. data/app/lib/actions/pulp/consumer/generate_applicability.rb +1 -0
  67. data/app/lib/actions/pulp/repository/copy_module_default.rb +11 -0
  68. data/app/lib/actions/pulp/repository/copy_module_stream.rb +11 -0
  69. data/app/lib/actions/pulp/repository/create.rb +2 -0
  70. data/app/lib/actions/pulp/repository/distributor_publish.rb +3 -2
  71. data/app/lib/actions/pulp/repository/remove_module_default.rb +11 -0
  72. data/app/lib/actions/pulp/repository/remove_module_stream.rb +11 -0
  73. data/app/lib/actions/pulp/repository/sync.rb +6 -19
  74. data/app/lib/actions/pulp/repository/update_importer.rb +9 -7
  75. data/app/lib/katello/concerns/base_template_scope_extensions.rb +42 -0
  76. data/app/lib/katello/concerns/renderer_extensions.rb +6 -4
  77. data/app/lib/katello/http_resource.rb +5 -1
  78. data/app/lib/katello/repo_discovery.rb +6 -2
  79. data/app/lib/katello/resources/candlepin/consumer.rb +18 -1
  80. data/app/lib/katello/resources/candlepin/owner.rb +9 -0
  81. data/app/lib/katello/resources/candlepin/pool.rb +2 -2
  82. data/app/lib/katello/validators/root_repository_unique_attribute_validator.rb +13 -0
  83. data/app/models/katello/authorization/product.rb +3 -4
  84. data/app/models/katello/authorization/repository.rb +4 -4
  85. data/app/models/katello/candlepin/repository_mapper.rb +12 -26
  86. data/app/models/katello/concerns/audit_search.rb +13 -0
  87. data/app/models/katello/concerns/content_facet_host_extensions.rb +1 -1
  88. data/app/models/katello/concerns/content_view_filter_rule_common.rb +1 -0
  89. data/app/models/katello/concerns/host_managed_extensions.rb +68 -2
  90. data/app/models/katello/concerns/hostgroup_extensions.rb +13 -0
  91. data/app/models/katello/concerns/location_extensions.rb +3 -3
  92. data/app/models/katello/concerns/organization_extensions.rb +7 -3
  93. data/app/models/katello/concerns/pulp_database_unit.rb +1 -0
  94. data/app/models/katello/concerns/recurring_logic_extensions.rb +11 -0
  95. data/app/models/katello/concerns/redhat_extensions.rb +0 -25
  96. data/app/models/katello/concerns/search_by_repository_name.rb +21 -0
  97. data/app/models/katello/concerns/setting_extensions.rb +1 -1
  98. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +43 -0
  99. data/app/models/katello/content.rb +7 -3
  100. data/app/models/katello/content_view.rb +4 -4
  101. data/app/models/katello/content_view_component.rb +1 -1
  102. data/app/models/katello/content_view_history.rb +1 -0
  103. data/app/models/katello/content_view_version.rb +14 -2
  104. data/app/models/katello/docker_manifest_list.rb +1 -1
  105. data/app/models/katello/docker_meta_tag.rb +11 -2
  106. data/app/models/katello/docker_tag.rb +1 -1
  107. data/app/models/katello/erratum.rb +6 -0
  108. data/app/models/katello/file_unit.rb +0 -1
  109. data/app/models/katello/glue/candlepin/owner.rb +1 -0
  110. data/app/models/katello/glue/candlepin/pool.rb +1 -2
  111. data/app/models/katello/glue/candlepin/product.rb +0 -4
  112. data/app/models/katello/glue/candlepin/repository.rb +0 -21
  113. data/app/models/katello/glue/provider.rb +4 -2
  114. data/app/models/katello/glue/pulp/repo.rb +10 -173
  115. data/app/models/katello/glue/pulp/repos.rb +2 -112
  116. data/app/models/katello/gpg_key.rb +6 -14
  117. data/app/models/katello/host/content_facet.rb +1 -1
  118. data/app/models/katello/host/subscription_facet.rb +32 -8
  119. data/app/models/katello/kt_environment.rb +9 -29
  120. data/app/models/katello/module_profile.rb +6 -0
  121. data/app/models/katello/module_profile_rpm.rb +5 -0
  122. data/app/models/katello/module_stream.rb +112 -0
  123. data/app/models/katello/module_stream_artifact.rb +5 -0
  124. data/app/models/katello/ostree_branch.rb +0 -1
  125. data/app/models/katello/package_group.rb +1 -1
  126. data/app/models/katello/pool.rb +4 -0
  127. data/app/models/katello/product.rb +18 -21
  128. data/app/models/katello/product_content.rb +2 -2
  129. data/app/models/katello/puppet_module.rb +1 -0
  130. data/app/models/katello/purpose_addons_status.rb +50 -0
  131. data/app/models/katello/purpose_role_status.rb +50 -0
  132. data/app/models/katello/purpose_sla_status.rb +48 -0
  133. data/app/models/katello/purpose_status.rb +56 -0
  134. data/app/models/katello/purpose_usage_status.rb +50 -0
  135. data/app/models/katello/repository.rb +116 -280
  136. data/app/models/katello/repository_module_stream.rb +7 -0
  137. data/app/models/katello/root_repository.rb +262 -0
  138. data/app/models/katello/subscription_status.rb +1 -1
  139. data/app/models/katello/sync_plan.rb +93 -40
  140. data/app/presenters/katello/content_view_version_compare_presenter.rb +7 -2
  141. data/app/services/katello/candlepin/consumer.rb +25 -0
  142. data/app/services/katello/candlepin/message_handler.rb +18 -2
  143. data/app/services/katello/managed_content_medium_provider.rb +27 -0
  144. data/app/services/katello/product_content_finder.rb +3 -3
  145. data/app/services/katello/pulp/module_stream.rb +9 -0
  146. data/app/services/katello/pulp/repository.rb +22 -0
  147. data/app/services/katello/pulp/srpm.rb +1 -1
  148. data/app/services/katello/pxe_files_downloader.rb +41 -0
  149. data/app/services/katello/registration_manager.rb +5 -0
  150. data/app/views/katello/api/v2/content_facet/show.json.rabl +0 -4
  151. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +12 -2
  152. data/app/views/katello/api/v2/debs/compare.json.rabl +10 -0
  153. data/app/views/katello/api/v2/docker_manifest_lists/compare.json.rabl +10 -0
  154. data/app/views/katello/api/v2/environments/show.json.rabl +1 -0
  155. data/app/views/katello/api/v2/hosts/host_collections.json.rabl +3 -0
  156. data/app/views/katello/api/v2/module_streams/base.json.rabl +4 -0
  157. data/app/views/katello/api/v2/module_streams/index.json.rabl +7 -0
  158. data/app/views/katello/api/v2/module_streams/name_stream.json.rabl +3 -0
  159. data/app/views/katello/api/v2/module_streams/name_streams.json.rabl +7 -0
  160. data/app/views/katello/api/v2/module_streams/show.json.rabl +21 -0
  161. data/app/views/katello/api/v2/organizations/show.json.rabl +4 -1
  162. data/app/views/katello/api/v2/products/base.json.rabl +1 -1
  163. data/app/views/katello/api/v2/repositories/base.json.rabl +23 -10
  164. data/app/views/katello/api/v2/repositories/show.json.rabl +47 -38
  165. data/app/views/katello/api/v2/smart_proxies/download_policy.json.rabl +1 -0
  166. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  167. data/app/views/katello/api/v2/sync_plans/show.json.rabl +2 -1
  168. data/app/views/katello/layouts/react.html.erb +1 -0
  169. data/config/katello.yaml.example +1 -2
  170. data/config/routes.rb +5 -0
  171. data/config/routes/api/v2.rb +12 -1
  172. data/config/routes/overrides.rb +1 -0
  173. data/db/migrate/20150114225023_add_upstream_name_to_repository.rb +7 -2
  174. data/db/migrate/20170208215148_add_docker_repo_name.rb +10 -1
  175. data/db/migrate/20180326190408_move_subscription_products.rb +2 -0
  176. data/db/migrate/20180622105300_add_docker_tags_whitelist_to_repository.rb +9 -0
  177. data/db/migrate/20180725083800_change_repository_password_length.rb +5 -0
  178. data/db/migrate/20180806205420_add_index_to_content_view_version.rb +5 -0
  179. data/db/migrate/20180807145652_create_katello_module_streams.rb +88 -0
  180. data/db/migrate/20180807164405_remove_repository_cp_label.rb +5 -0
  181. data/db/migrate/20180808013432_add_system_purpose_attrs.rb +39 -0
  182. data/db/migrate/20180814202747_add_recurring_logic_to_sync_plan.rb +12 -0
  183. data/db/migrate/20180816142044_add_description_to_katello_module_streams.rb +6 -0
  184. data/db/migrate/20180821144248_add_cron_logic_to_sync_plans.rb +5 -0
  185. data/db/migrate/20180828161400_remove_join_table_for_role_and_usage.rb +20 -0
  186. data/db/migrate/20180917173645_add_source_repo_checksum_type_to_katello_repositories.rb +1 -1
  187. data/db/migrate/20180920123913_drop_repo_module_streams_timestamp_not_null.rb +7 -0
  188. data/db/migrate/20180920171008_change_repository_password_to_text.rb +17 -0
  189. data/db/migrate/20180920214134_create_repository_root.rb +142 -0
  190. data/db/seeds.d/111-container-image-bookmarks.rb +19 -0
  191. data/db/seeds.d/111-upgrade_tasks.rb +9 -0
  192. data/db/seeds.d/150-module_job_templates.rb +12 -0
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +1 -0
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion_katello.js +3 -0
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/module-stream-actions.service.js +26 -0
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/subscription-add-or-remove.html +1 -1
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-module-streams-modal.controller.js +60 -0
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-repository-sets-modal.controller.js +2 -1
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-host-bulk-module-streams-modal.html +70 -0
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-packages-modal.html +16 -14
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-repository-sets-modal.html +1 -7
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js +11 -0
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js +8 -4
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +5 -0
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +14 -0
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +48 -0
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-module-streams.html +68 -0
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +15 -0
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +59 -2
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +6 -0
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +81 -27
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-provisioning-info.html +1 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions.html +2 -2
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +4 -0
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +10 -0
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -1
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +5 -0
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +3 -0
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +7 -0
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +1 -2
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +38 -13
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-versions.module.js +1 -0
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +8 -0
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-ostree-branches.html +1 -1
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +1 -1
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +1 -1
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +5 -0
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +7 -0
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.controller.js +1 -0
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/content.service.js +5 -0
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-module-streams.html +38 -0
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +1 -1
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.routes.js +11 -0
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -0
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-repositories.controller.js +6 -22
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-repositories.html +7 -1
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-details.controller.js +4 -0
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-info.html +6 -0
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-bulk-action.factory.js +2 -1
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/module-streams/module-stream.factory.js +27 -0
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/module-streams/module-streams.module.js +15 -0
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/module-streams/views/partials/module-streams-table.html +25 -0
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package-repositories.controller.js +6 -22
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-repositories.html +7 -1
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/repositories-filters.service.js +89 -0
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +4 -5
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +15 -2
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.filter.js +2 -2
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +15 -11
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +5 -0
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +36 -20
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-module-streams.html +17 -0
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +6 -6
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js +9 -0
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +5 -0
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +2 -1
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery.html +10 -0
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/new/new-sync-plan-modal.controller.js +6 -2
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/repository-sets/repository-set.factory.js +1 -1
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details-info.controller.js +20 -3
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details.controller.js +2 -1
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +23 -4
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/new/new-sync-plan.controller.js +10 -6
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/new/views/new-sync-plan-form.html +11 -3
  265. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/sync-plan-helper.service.js +3 -3
  266. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/bastion_katello.scss +5 -1
  267. data/engines/bastion_katello/lib/bastion_katello/engine.rb +2 -2
  268. data/lib/katello/engine.rb +7 -12
  269. data/lib/katello/permission_creator.rb +5 -1
  270. data/lib/katello/permissions/host_permissions.rb +1 -0
  271. data/lib/katello/plugin.rb +38 -14
  272. data/lib/katello/tasks/clean_backend_objects.rake +7 -3
  273. data/lib/katello/tasks/reimport.rake +1 -0
  274. data/lib/katello/tasks/repository.rake +11 -8
  275. data/lib/katello/tasks/upgrades/3.9/migrate_sync_plans.rake +29 -0
  276. data/lib/katello/version.rb +1 -1
  277. data/package.json +11 -7
  278. data/webpack/__mocks__/foremanReact/common/I18n.js +5 -0
  279. data/webpack/components/MultiSelect/index.js +15 -3
  280. data/webpack/components/PaginationRow/index.js +1 -1
  281. data/webpack/components/Search/__snapshots__/Search.test.js.snap +1 -0
  282. data/webpack/components/Search/index.js +5 -1
  283. data/webpack/components/SelectOrg/SetOrganization.js +2 -1
  284. data/webpack/components/WithOrganization/__snapshots__/withOrganization.test.js.snap +41 -0
  285. data/webpack/components/WithOrganization/withOrganization.js +42 -10
  286. data/webpack/components/WithOrganization/withOrganization.test.js +26 -0
  287. data/webpack/containers/Application/Headers.js +11 -0
  288. data/webpack/containers/Application/Routes.js +1 -1
  289. data/webpack/containers/Application/config.js +23 -7
  290. data/webpack/containers/Application/withHeaders.js +15 -0
  291. data/webpack/move_to_foreman/common/helpers.js +72 -8
  292. data/webpack/move_to_foreman/components/common/ConfirmDialog/ConfirmDialog.js +1 -0
  293. data/webpack/move_to_foreman/components/common/Dialog/Dialog.js +1 -0
  294. data/webpack/move_to_foreman/components/common/EmptyState/index.js +1 -0
  295. data/webpack/move_to_foreman/components/common/ModalProgressBar/ModalProgressBar.js +1 -1
  296. data/webpack/move_to_foreman/components/common/table/formatters/selectionCellFormatter.js +1 -0
  297. data/webpack/move_to_pf/OptionTooltip/OptionTooltip.scss +20 -0
  298. data/webpack/move_to_pf/OptionTooltip/__tests__/OptionTooltip.test.js +32 -0
  299. data/webpack/move_to_pf/OptionTooltip/__tests__/__snapshots__/OptionTooltip.test.js.snap +84 -0
  300. data/webpack/move_to_pf/OptionTooltip/index.js +83 -0
  301. data/webpack/move_to_pf/TypeAhead/TypeAhead.js +15 -2
  302. data/webpack/move_to_pf/react-bootstrap-select/index.js +10 -4
  303. data/webpack/move_to_pf/test-utils/testHelpers.js +14 -2
  304. data/webpack/redux/actions/RedHatRepositories/enabled.js +29 -3
  305. data/webpack/redux/actions/RedHatRepositories/helpers.js +1 -1
  306. data/webpack/redux/actions/RedHatRepositories/repositorySetRepositories.js +27 -0
  307. data/webpack/redux/consts.js +8 -0
  308. data/webpack/redux/reducers/RedHatRepositories/__tests__/enabled.test.js +62 -0
  309. data/webpack/redux/reducers/RedHatRepositories/{repositorySetRepositories.test.js → __tests__/repositorySetRepositories.test.js} +31 -3
  310. data/webpack/redux/reducers/RedHatRepositories/{sets.test.js → __tests__/sets.test.js} +3 -3
  311. data/webpack/redux/reducers/RedHatRepositories/enabled.fixtures.js +16 -0
  312. data/webpack/redux/reducers/RedHatRepositories/enabled.js +34 -18
  313. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.fixtures.js +10 -0
  314. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +39 -48
  315. data/webpack/redux/reducers/index.js +6 -0
  316. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailArtifacts.js +19 -0
  317. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailInfo.js +51 -0
  318. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetails.js +147 -0
  319. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsActions.js +25 -0
  320. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsConstants.js +3 -0
  321. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsReducer.js +33 -0
  322. data/webpack/scenes/ModuleStreams/Details/Profiles/ModuleStreamDetailProfiles.js +19 -0
  323. data/webpack/scenes/ModuleStreams/Details/Profiles/ProfileRpmsCellFormatter.js +53 -0
  324. data/webpack/scenes/ModuleStreams/Details/Profiles/ProfileRpmsCellFormatter.scss +4 -0
  325. data/webpack/scenes/ModuleStreams/Details/Profiles/TableSchema.js +35 -0
  326. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +14 -0
  327. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ProfileRpmsCellFormatter.test.js +24 -0
  328. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/__snapshots__/ModuleStreamDetailProfiles.test.js.snap +126 -0
  329. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/__snapshots__/ProfileRpmsCellFormatter.test.js.snap +14 -0
  330. data/webpack/scenes/ModuleStreams/Details/Repositories/ModuleStreamDetailRepositories.js +19 -0
  331. data/webpack/scenes/ModuleStreams/Details/Repositories/TableSchema.js +39 -0
  332. data/webpack/scenes/ModuleStreams/Details/Repositories/__tests__/ModuleStreamDetailRepositories.test.js +14 -0
  333. data/webpack/scenes/ModuleStreams/Details/Repositories/__tests__/__snapshots__/ModuleStreamDetailRepositories.test.js.snap +70 -0
  334. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailArtifacts.test.js +14 -0
  335. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailInfo.test.js +14 -0
  336. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +27 -0
  337. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailsActions.test.js +42 -0
  338. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailsReducer.test.js +33 -0
  339. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetailArtifacts.test.js.snap +18 -0
  340. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetailInfo.test.js.snap +111 -0
  341. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetails.test.js.snap +552 -0
  342. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetailsActions.test.js.snap +144 -0
  343. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetailsReducer.test.js.snap +50 -0
  344. data/webpack/scenes/ModuleStreams/Details/__tests__/moduleStreamDetails.fixtures.js +115 -0
  345. data/webpack/scenes/ModuleStreams/Details/index.js +17 -0
  346. data/webpack/scenes/ModuleStreams/ModuleStreamsActions.js +29 -0
  347. data/webpack/scenes/ModuleStreams/ModuleStreamsConstants.js +3 -0
  348. data/webpack/scenes/ModuleStreams/ModuleStreamsPage.js +98 -0
  349. data/webpack/scenes/ModuleStreams/ModuleStreamsReducer.js +43 -0
  350. data/webpack/scenes/ModuleStreams/ModuleStreamsTable.js +38 -0
  351. data/webpack/scenes/ModuleStreams/ModuleStreamsTableSchema.js +69 -0
  352. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +27 -0
  353. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsActions.test.js +49 -0
  354. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsReducer.test.js +46 -0
  355. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +25 -0
  356. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamPage.test.js.snap +69 -0
  357. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap +95 -0
  358. data/webpack/scenes/ModuleStreams/__tests__/moduleStreams.fixtures.js +72 -0
  359. data/webpack/scenes/ModuleStreams/index.js +17 -0
  360. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +120 -0
  361. data/webpack/scenes/RedHatRepositories/components/{EnabledRepository.stories.js → EnabledRepository/EnabledRepository.stories.js} +0 -0
  362. data/webpack/scenes/RedHatRepositories/components/{EnabledRepositoryContent.js → EnabledRepository/EnabledRepositoryContent.js} +0 -0
  363. data/webpack/scenes/RedHatRepositories/components/{__tests__ → EnabledRepository/__tests__}/EnabledRepository.test.js +6 -2
  364. data/webpack/scenes/RedHatRepositories/components/{__tests__ → EnabledRepository/__tests__}/EnabledRepositoryContent.test.js +0 -0
  365. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/__snapshots__/EnabledRepository.test.js.snap +31 -0
  366. data/webpack/scenes/RedHatRepositories/components/{__tests__ → EnabledRepository/__tests__}/__snapshots__/EnabledRepositoryContent.test.js.snap +0 -0
  367. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/index.js +17 -0
  368. data/webpack/scenes/RedHatRepositories/components/RepositorySet.js +1 -1
  369. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +43 -5
  370. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositoriesHelpers.js +3 -0
  371. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/RepositorySetRepository.js +168 -0
  372. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/__test__/RepositorySetRepository.test.js +38 -0
  373. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/__test__/__snapshots__/RepositorySetRepository.test.js.snap +70 -0
  374. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/index.js +18 -0
  375. data/webpack/scenes/RedHatRepositories/components/SearchBar.js +4 -3
  376. data/webpack/scenes/RedHatRepositories/components/__tests__/RepositorySetRepositories.test.js +44 -0
  377. data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/RepositorySetRepositories.test.js.snap +48 -0
  378. data/webpack/scenes/RedHatRepositories/helpers.js +19 -15
  379. data/webpack/scenes/RedHatRepositories/index.js +1 -3
  380. data/webpack/scenes/RedHatRepositories/index.scss +16 -0
  381. data/webpack/scenes/Settings/Tables/TableActions.js +73 -0
  382. data/webpack/scenes/Settings/Tables/TableConstants.js +11 -0
  383. data/webpack/scenes/Settings/Tables/TableHelpers.js +8 -0
  384. data/webpack/scenes/Settings/Tables/TableReducer.js +46 -0
  385. data/webpack/scenes/Settings/Tables/__tests__/Table.fixtures.js +125 -0
  386. data/webpack/scenes/Settings/Tables/__tests__/TableActions.test.js +84 -0
  387. data/webpack/scenes/Settings/Tables/__tests__/TableReducer.test.js +41 -0
  388. data/webpack/scenes/Settings/Tables/__tests__/__snapshots__/TableReducer.test.js.snap +76 -0
  389. data/webpack/scenes/Settings/index.js +4 -0
  390. data/webpack/scenes/Subscriptions/Details/SubscriptionAttributes.js +2 -0
  391. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailActions.js +1 -1
  392. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailAssociations.js +1 -0
  393. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +1 -0
  394. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProduct.js +20 -13
  395. data/webpack/scenes/Subscriptions/Details/{SubscriptionDetailEnabledProducts.js → SubscriptionDetailProductContent.js} +5 -5
  396. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailReducer.js +3 -3
  397. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +7 -6
  398. data/webpack/scenes/Subscriptions/Details/__tests__/{SubscriptionDetailEnabledProducts.test.js → SubscriptionDetailProductContent.test.js} +4 -4
  399. data/webpack/scenes/Subscriptions/Details/__tests__/SubscriptionDetails.test.js +2 -2
  400. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailProduct.test.js.snap +28 -16
  401. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/{SubscriptionDetailEnabledProducts.test.js.snap → SubscriptionDetailProductContent.test.js.snap} +1 -1
  402. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +16 -16
  403. data/webpack/scenes/Subscriptions/Details/__tests__/subscriptionDetails.fixtures.js +1 -1
  404. data/webpack/scenes/Subscriptions/Manifest/DeleteManifestModalText.js +2 -0
  405. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +38 -61
  406. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +4 -0
  407. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryTableSchema.js +1 -0
  408. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +3 -3
  409. data/webpack/scenes/Subscriptions/Manifest/__tests__/__snapshots__/ManageManifestModal.test.js.snap +12 -3
  410. data/webpack/scenes/Subscriptions/SubscriptionActions.js +26 -0
  411. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +56 -0
  412. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +26 -11
  413. data/webpack/scenes/Subscriptions/SubscriptionValidations.js +1 -0
  414. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +144 -39
  415. data/webpack/scenes/Subscriptions/SubscriptionsPage.scss +7 -0
  416. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +10 -16
  417. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsTableSchema.js +1 -0
  418. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +1 -1
  419. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +11 -1
  420. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +15 -2
  421. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +12 -0
  422. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +19 -0
  423. data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +87 -0
  424. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/EntitlementsInlineEditFormatter.js +1 -1
  425. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionTypeFormatter.js +31 -0
  426. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +16 -11
  427. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +18 -3
  428. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionTypeFormatter.test.js +33 -0
  429. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +29 -0
  430. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionTypeFormatter.test.js.snap +34 -0
  431. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +24 -43
  432. data/webpack/scenes/Subscriptions/index.js +24 -7
  433. data/webpack/scenes/Tasks/TaskActions.js +43 -19
  434. data/webpack/scenes/Tasks/TaskConstants.js +1 -0
  435. data/webpack/scenes/Tasks/__tests__/TaskActions.test.js +15 -12
  436. data/webpack/scenes/Tasks/helpers.js +17 -27
  437. data/webpack/services/api/index.js +3 -0
  438. metadata +160 -52
  439. data/app/lib/actions/katello/repository/scheduled_sync.rb +0 -15
  440. data/app/lib/actions/katello/sync_plan/add_products.rb +0 -27
  441. data/app/lib/actions/katello/sync_plan/destroy.rb +0 -26
  442. data/app/lib/actions/katello/sync_plan/remove_products.rb +0 -23
  443. data/app/lib/actions/katello/sync_plan/update.rb +0 -20
  444. data/app/lib/actions/pulp/repos/update.rb +0 -24
  445. data/app/lib/actions/pulp/repository/ensure_sync_notification.rb +0 -11
  446. data/app/lib/actions/pulp/repository/remove_schedule.rb +0 -16
  447. data/app/lib/actions/pulp/repository/update_schedule.rb +0 -47
  448. data/app/lib/katello/validators/repository_unique_attribute_validator.rb +0 -13
  449. data/app/models/katello/candlepin/docker_repository_mapper.rb +0 -77
  450. data/app/models/katello/input_template_renderer.rb +0 -7
  451. data/lib/katello/tasks/upgrades/2.4/import_distributions.rake +0 -11
  452. data/lib/katello/tasks/upgrades/2.4/import_package_groups.rake +0 -11
  453. data/lib/katello/tasks/upgrades/2.4/import_puppet_modules.rake +0 -12
  454. data/lib/katello/tasks/upgrades/2.4/import_rpms.rake +0 -12
  455. data/lib/katello/tasks/upgrades/3.0/add_export_distributor.rake +0 -14
  456. data/lib/katello/tasks/upgrades/3.0/delete_docker_v1_content.rake +0 -27
  457. data/lib/katello/tasks/upgrades/3.0/update_puppet_repository_distributors.rake +0 -20
  458. data/lib/katello/tasks/upgrades/3.0/update_subscription_facet_backend_data.rake +0 -9
  459. data/lib/katello/tasks/upgrades/3.3/hypervisors.rake +0 -7
  460. data/lib/katello/tasks/upgrades/3.4/reindex_docker_tags.rake +0 -12
  461. data/lib/katello/tasks/upgrades/3.4/remove_unused_products.rake +0 -28
  462. data/lib/katello/tasks/upgrades/3.6/import_backend_consumer_attributes.rake +0 -32
  463. data/lib/katello/tasks/upgrades/3.6/import_product_content.rake +0 -12
  464. data/lib/katello/tasks/upgrades/3.6/republish_file_repos.rake +0 -16
  465. data/lib/katello/tasks/upgrades/3.7/import_pools.rake +0 -12
  466. data/lib/katello/tasks/upgrades/3.7/make_all_ks_repos_bootable.rake +0 -11
  467. data/webpack/helpers/caret.js +0 -6
  468. data/webpack/redux/reducers/RedHatRepositories/enabled.test.js +0 -36
  469. data/webpack/redux/reducers/RedHatRepositories/filters.fixtures.js +0 -5
  470. data/webpack/scenes/RedHatRepositories/components/EnabledRepository.js +0 -105
  471. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository.js +0 -129
  472. data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/EnabledRepository.test.js.snap +0 -25
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module Concerns
3
+ module AuditSearch
4
+ extend ActiveSupport::Concern
5
+
6
+ # since this class makes User class STI, we need to provide alias for auditable_type to re-enable searching
7
+ # audits by type = user
8
+ def auditable_type_complete_values
9
+ super.merge(:user => 'User')
10
+ end
11
+ end
12
+ end
13
+ end
@@ -114,5 +114,5 @@ module Katello
114
114
  end
115
115
 
116
116
  class ::Host::Managed::Jail < Safemode::Jail
117
- allow :content_view, :lifecycle_environment, :content_source
117
+ allow :content_view, :lifecycle_environment, :content_source, :applicable_errata
118
118
  end
@@ -4,6 +4,7 @@ module Katello
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ scoped_search on: :id
7
8
  scoped_search on: :name
8
9
 
9
10
  validates_lengths_from_database
@@ -15,6 +15,19 @@ module Katello
15
15
  ids << content_source_id
16
16
  ids.uniq.compact
17
17
  end
18
+
19
+ def update_os_from_facts
20
+ super
21
+
22
+ # If facts causes the OS to change, our kickstart repo might not be
23
+ # valid anymore. Let's reset it, either to nil or a valid one
24
+ ks_repo = content_facet&.kickstart_repository
25
+ valid_repos = operatingsystem.respond_to?(:kickstart_repos) ? (operatingsystem.kickstart_repos(self)&.pluck(:id) || []) : []
26
+
27
+ if ks_repo && valid_repos.exclude?(ks_repo.id)
28
+ content_facet.kickstart_repository_id = valid_repos.first
29
+ end
30
+ end
18
31
  end
19
32
 
20
33
  included do
@@ -30,6 +43,7 @@ module Katello
30
43
  has_many :hypervisor_pools, :class_name => '::Katello::Pool', :foreign_key => :hypervisor_id, :dependent => :nullify
31
44
 
32
45
  before_save :correct_puppet_environment
46
+ before_validation :correct_kickstart_repository
33
47
 
34
48
  scoped_search :relation => :host_collections, :on => :id, :complete_value => false, :rename => :host_collection_id, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
35
49
  scoped_search :relation => :host_collections, :on => :name, :complete_value => true, :rename => :host_collection
@@ -40,6 +54,18 @@ module Katello
40
54
  scoped_search :relation => :host_traces, :on => :helper, :complete_value => true, :rename => :trace_helper, :only_explicit => true
41
55
  end
42
56
 
57
+ def correct_kickstart_repository
58
+ return unless content_facet
59
+
60
+ # If switched from ks repo to install media:
61
+ if medium_id_changed? && medium && content_facet.kickstart_repository
62
+ content_facet.kickstart_repository_id = nil
63
+ # If switched from install media to ks repo:
64
+ elsif content_facet.kickstart_repository && medium
65
+ self.medium = nil
66
+ end
67
+ end
68
+
43
69
  def rhsm_organization_label
44
70
  self.organization.label
45
71
  end
@@ -57,12 +83,12 @@ module Katello
57
83
 
58
84
  def content_and_puppet_matched?
59
85
  content_facet && content_facet.content_view_id_was == environment.try(:content_view).try(:id) &&
60
- content_facet.lifecycle_environment_id_was == self.environment.try(:lifecycle_environment).try(:id)
86
+ content_facet.lifecycle_environment_id_was == self.environment.try(:lifecycle_environment).try(:id)
61
87
  end
62
88
 
63
89
  def content_and_puppet_match?
64
90
  content_facet && content_facet.content_view_id == environment.try(:content_view).try(:id) &&
65
- content_facet.lifecycle_environment_id == self.environment.try(:lifecycle_environment).try(:id)
91
+ content_facet.lifecycle_environment_id == self.environment.try(:lifecycle_environment).try(:id)
66
92
  end
67
93
 
68
94
  def import_package_profile(simple_packages)
@@ -137,6 +163,46 @@ module Katello
137
163
  @errata_status_label ||= get_status(::Katello::ErrataStatus).to_label(options)
138
164
  end
139
165
 
166
+ def purpose_status
167
+ @purpose_status ||= get_status(::Katello::PurposeStatus).status
168
+ end
169
+
170
+ def purpose_status_label(options = {})
171
+ @purpose_status_label ||= get_status(::Katello::PurposeStatus).to_label(options)
172
+ end
173
+
174
+ def purpose_sla_status
175
+ @purpose_sla_status ||= get_status(::Katello::PurposeSlaStatus).status
176
+ end
177
+
178
+ def purpose_sla_status_label(options = {})
179
+ @purpose_sla_status_label ||= get_status(::Katello::PurposeSlaStatus).to_label(options)
180
+ end
181
+
182
+ def purpose_role_status
183
+ @purpose_role_status ||= get_status(::Katello::PurposeRoleStatus).status
184
+ end
185
+
186
+ def purpose_role_status_label(options = {})
187
+ @purpose_role_status_label ||= get_status(::Katello::PurposeRoleStatus).to_label(options)
188
+ end
189
+
190
+ def purpose_usage_status
191
+ @purpose_usage_status ||= get_status(::Katello::PurposeUsageStatus).status
192
+ end
193
+
194
+ def purpose_usage_status_label(options = {})
195
+ @purpose_usage_status_label ||= get_status(::Katello::PurposeUsageStatus).to_label(options)
196
+ end
197
+
198
+ def purpose_addons_status
199
+ @purpose_addons_status ||= get_status(::Katello::PurposeAddonsStatus).status
200
+ end
201
+
202
+ def purpose_addons_status_label(options = {})
203
+ @purpose_addons_status_label ||= get_status(::Katello::PurposeAddonsStatus).to_label(options)
204
+ end
205
+
140
206
  def valid_content_override_label?(content_label)
141
207
  available_content = subscription_facet.candlepin_consumer.available_product_content
142
208
  available_content.map(&:content).any? { |content| content.label == content_label }
@@ -13,10 +13,23 @@ module Katello
13
13
 
14
14
  validates_with Katello::Validators::ContentViewEnvironmentValidator
15
15
  validates_with Katello::Validators::HostgroupKickstartRepositoryValidator
16
+ validates_with ::AssociationExistsValidator, attributes: [:content_source]
16
17
 
17
18
  scoped_search :relation => :content_source, :on => :name, :complete_value => true, :rename => :content_source, :only_explicit => true
18
19
  scoped_search :relation => :content_view, :on => :name, :complete_value => true, :rename => :content_view, :only_explicit => true
19
20
  scoped_search :relation => :lifecycle_environment, :on => :name, :complete_value => true, :rename => :lifecycle_environment, :only_explicit => true
21
+
22
+ before_validation :correct_kickstart_repository
23
+ end
24
+
25
+ def correct_kickstart_repository
26
+ # If switched from ks repo to install media:
27
+ if medium_id_changed? && medium && kickstart_repository_id
28
+ self.kickstart_repository_id = nil
29
+ # If switched from install media to ks repo:
30
+ elsif kickstart_repository && medium
31
+ self.medium = nil
32
+ end
20
33
  end
21
34
 
22
35
  def content_view
@@ -15,11 +15,11 @@ module Katello
15
15
  end
16
16
 
17
17
  def reset_settings
18
- if self.title_changed?
19
- if ::Setting[:default_location_subscribed_hosts] == self.title_was
18
+ if saved_change_to_attribute?(:title)
19
+ if ::Setting[:default_location_subscribed_hosts] == self.title_before_last_save
20
20
  ::Setting[:default_location_subscribed_hosts] = self.title
21
21
  end
22
- if ::Setting[:default_location_puppet_content] == self.title_was
22
+ if ::Setting[:default_location_puppet_content] == self.title_before_last_save
23
23
  ::Setting[:default_location_puppet_content] = self.title
24
24
  end
25
25
  end
@@ -52,6 +52,10 @@ module Katello
52
52
  ContentView.default.where(:organization_id => self.id).first
53
53
  end
54
54
 
55
+ def default_content_view_version
56
+ default_content_view.versions.first
57
+ end
58
+
55
59
  def promotion_paths
56
60
  #I'm sure there's a better way to do this
57
61
  self.kt_environments.joins(:priors).where("prior_id = #{self.library.id}").order(:name).collect do |env|
@@ -137,9 +141,9 @@ module Katello
137
141
  products.any?(&:syncable_content?)
138
142
  end
139
143
 
140
- def enabled_product_content_for(repositories)
141
- return [] if repositories.blank?
142
- content_ids = repositories.pluck(:content_id)
144
+ def enabled_product_content_for(roots)
145
+ return [] if roots.blank?
146
+ content_ids = roots.pluck(:content_id)
143
147
 
144
148
  filtered_product_content do |pc|
145
149
  content_ids.include?(pc.content.cp_content_id) && pc.product.enabled?
@@ -3,6 +3,7 @@ require 'set'
3
3
  module Katello
4
4
  module Concerns::PulpDatabaseUnit
5
5
  extend ActiveSupport::Concern
6
+ include Katello::Concerns::SearchByRepositoryName
6
7
 
7
8
  # Class.repository_association_class
8
9
  # Class#update_from_json
@@ -0,0 +1,11 @@
1
+ module Katello
2
+ module Concerns
3
+ module RecurringLogicExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_one :sync_plan, :inverse_of => :foreman_tasks_recurring_logic, :class_name => "Katello::SyncPlan", :dependent => :destroy
8
+ end
9
+ end
10
+ end
11
+ end
@@ -3,31 +3,6 @@ module Katello
3
3
  module RedhatExtensions
4
4
  extend ActiveSupport::Concern
5
5
 
6
- module Overrides
7
- def medium_uri(host, url = nil)
8
- kickstart_repo = host.try(:content_facet).try(:kickstart_repository) || host.try(:kickstart_repository)
9
-
10
- if host.try(:content_source) && kickstart_repo.present?
11
- return URI.parse(kickstart_repo.full_path(host.content_source))
12
- else
13
- super(host, url)
14
- end
15
- end
16
-
17
- # overwrite foreman method in operatingsystem.rb
18
- def boot_files_uri(medium, architecture, host = nil)
19
- return super(medium, architecture, host) unless host.try(:content_source)
20
- family_class = self.family.constantize
21
- family_class::PXEFILES.values.collect do |img|
22
- "#{medium_uri(host)}/#{pxedir}/#{img}"
23
- end
24
- end
25
- end
26
-
27
- included do
28
- prepend Overrides
29
- end
30
-
31
6
  module ClassMethods
32
7
  def find_or_create_operating_system(repo)
33
8
  os_name = construct_name(repo.distribution_family)
@@ -0,0 +1,21 @@
1
+
2
+ module Katello
3
+ module Concerns
4
+ module SearchByRepositoryName
5
+ extend ActiveSupport::Concern
6
+ include ScopedSearchExtensions
7
+
8
+ included do
9
+ scoped_search :relation => :repositories, :on => :name, :rename => :repository, :complete_value => true, :ext_method => :search_by_repo_name, :only_explicit => true
10
+ end
11
+
12
+ module ClassMethods
13
+ def search_by_repo_name(_key, operator, value)
14
+ conditions = sanitize_sql_for_conditions(["#{Katello::RootRepository.table_name}.name #{operator} ?", value_to_sql(operator, value)])
15
+ query = self.joins(:repositories => :root).where(conditions).select('id')
16
+ {:conditions => "#{self.table_name}.id IN (#{query.to_sql})"}
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -11,7 +11,7 @@ module Katello
11
11
  end
12
12
 
13
13
  def recalculate_errata_status
14
- ForemanTasks.async_task(Actions::Katello::Host::RecalculateErrataStatus) if value_changed? && name == 'errata_status_installable'
14
+ ForemanTasks.async_task(Actions::Katello::Host::RecalculateErrataStatus) if saved_change_to_attribute?(:value) && name == 'errata_status_installable'
15
15
  end
16
16
  end
17
17
  end
@@ -3,6 +3,10 @@ module Katello
3
3
  module SubscriptionFacetHostExtensions
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ # This module depends on #value_to_sql which is defined in ScopedSearchExtensions
7
+ # make sure this dependency is met.
8
+ include ::ScopedSearchExtensions
9
+
6
10
  included do
7
11
  audited :associations => [:pools]
8
12
 
@@ -14,6 +18,31 @@ module Katello
14
18
  :unsubscribed_hypervisor => Katello::SubscriptionStatus::UNSUBSCRIBED_HYPERVISOR
15
19
  }.freeze
16
20
 
21
+ SLA_STATUS_MAP = {
22
+ :valid => Katello::PurposeSlaStatus::VALID,
23
+ :invalid => Katello::PurposeSlaStatus::INVALID
24
+ }.freeze
25
+
26
+ USAGE_STATUS_MAP = {
27
+ :valid => Katello::PurposeUsageStatus::VALID,
28
+ :invalid => Katello::PurposeUsageStatus::INVALID
29
+ }.freeze
30
+
31
+ ROLE_STATUS_MAP = {
32
+ :valid => Katello::PurposeRoleStatus::VALID,
33
+ :invalid => Katello::PurposeRoleStatus::INVALID
34
+ }.freeze
35
+
36
+ ADDONS_STATUS_MAP = {
37
+ :valid => Katello::PurposeAddonsStatus::VALID,
38
+ :invalid => Katello::PurposeAddonsStatus::INVALID
39
+ }.freeze
40
+
41
+ PURPOSE_STATUS_MAP = {
42
+ :valid => Katello::PurposeStatus::VALID,
43
+ :invalid => Katello::PurposeStatus::INVALID
44
+ }.freeze
45
+
17
46
  prepend ForemanTasks::Concerns::ActionTriggering
18
47
 
19
48
  module Prepended
@@ -32,11 +61,22 @@ module Katello
32
61
  has_many :pools, :through => :subscription_facet
33
62
  has_many :subscriptions, :through => :pools
34
63
  has_one :subscription_status_object, :class_name => 'Katello::SubscriptionStatus', :foreign_key => 'host_id', :dependent => :destroy
64
+ has_one :purpose_sla_status_object, :class_name => 'Katello::PurposeSlaStatus', :foreign_key => 'host_id', :dependent => :destroy
65
+ has_one :purpose_role_status_object, :class_name => 'Katello::PurposeRoleStatus', :foreign_key => 'host_id', :dependent => :destroy
66
+ has_one :purpose_usage_status_object, :class_name => 'Katello::PurposeUsageStatus', :foreign_key => 'host_id', :dependent => :destroy
67
+ has_one :purpose_addons_status_object, :class_name => 'Katello::PurposeAddonsStatus', :foreign_key => 'host_id', :dependent => :destroy
68
+ has_one :purpose_status_object, :class_name => 'Katello::PurposeStatus', :foreign_key => 'host_id', :dependent => :destroy
35
69
  has_one :hypervisor_host, :through => :subscription_facet
36
70
 
37
71
  scoped_search :on => :status, :relation => :subscription_status_object, :rename => :subscription_status,
38
72
  :complete_value => SUBSCRIPTION_STATUS_MAP
39
73
 
74
+ scoped_search on: :status, relation: :purpose_sla_status_object, rename: :sla_status, complete_value: SLA_STATUS_MAP
75
+ scoped_search on: :status, relation: :purpose_role_status_object, rename: :role_status, complete_value: ROLE_STATUS_MAP
76
+ scoped_search on: :status, relation: :purpose_usage_status_object, rename: :usage_status, complete_value: USAGE_STATUS_MAP
77
+ scoped_search on: :status, relation: :purpose_addons_status_object, rename: :addons_status, complete_value: ADDONS_STATUS_MAP
78
+ scoped_search on: :status, relation: :purpose_status_object, rename: :purpose_status, complete_value: PURPOSE_STATUS_MAP
79
+
40
80
  scoped_search :on => :release_version, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
41
81
  scoped_search :on => :autoheal, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
42
82
  scoped_search :on => :service_level, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
@@ -51,6 +91,9 @@ module Katello
51
91
  scoped_search :on => :name, :relation => :hypervisor_host, :complete_value => true, :rename => :hypervisor_host, :ext_method => :find_by_hypervisor_host
52
92
  scoped_search :on => :name, :relation => :subscriptions, :rename => :subscription_name, :complete_value => true, :ext_method => :find_by_subscription_name
53
93
  scoped_search :on => :id, :relation => :pools, :rename => :subscription_id, :complete_value => true, :ext_method => :find_by_subscription_id, :only_explicit => true
94
+ scoped_search :on => :purpose_role, :rename => :role, :relation => :subscription_facet, :complete_value => true
95
+ scoped_search :on => :purpose_usage, :rename => :usage, :relation => :subscription_facet, :complete_value => true
96
+ scoped_search :on => :purpose_addons, :rename => :addon, :relation => :subscription_facet, :complete_value => true
54
97
  end
55
98
 
56
99
  module ClassMethods
@@ -16,13 +16,17 @@ module Katello
16
16
  after_save :update_repository_names, :if => :propagate_name_change?
17
17
 
18
18
  def update_repository_names
19
- self.repositories.each do |repo|
20
- repo.update_attributes!(:name => repo.calculate_updated_name)
19
+ root_repositories.each do |root|
20
+ root.update_attributes!(:name => root.calculate_updated_name)
21
21
  end
22
22
  end
23
23
 
24
+ def root_repositories
25
+ Katello::RootRepository.where(:content_id => self.cp_content_id)
26
+ end
27
+
24
28
  def repositories
25
- Katello::Repository.where(:content_id => self.cp_content_id)
29
+ Katello::Repository.where(:root_id => root_repositories)
26
30
  end
27
31
 
28
32
  def redhat?
@@ -24,7 +24,7 @@ module Katello
24
24
  # component_composites -> Bottom Up, given I am a component CV get the associated composites that I belong to
25
25
  #
26
26
  has_many :content_view_components, :class_name => "Katello::ContentViewComponent", :dependent => :destroy,
27
- :inverse_of => :composite_content_view, :foreign_key => :composite_content_view_id
27
+ :inverse_of => :composite_content_view, :foreign_key => :composite_content_view_id, autosave: true
28
28
 
29
29
  has_many :component_composites, :class_name => "Katello::ContentViewComponent",
30
30
  :dependent => :destroy, :inverse_of => :content_view, :foreign_key => :content_view_id
@@ -411,7 +411,7 @@ module Katello
411
411
  end
412
412
 
413
413
  def duplicate_docker_repos
414
- duplicate_repositories.where(:content_type => Katello::Repository::DOCKER_TYPE)
414
+ duplicate_repositories.docker_type
415
415
  end
416
416
 
417
417
  def check_non_composite_components
@@ -494,7 +494,7 @@ module Katello
494
494
  :components => components
495
495
  )
496
496
 
497
- increment!(:next_version) if minor == 0
497
+ update_attributes(:next_version => major.to_i + 1) unless major.to_i < next_version
498
498
  version
499
499
  end
500
500
 
@@ -647,7 +647,7 @@ module Katello
647
647
  end
648
648
 
649
649
  def on_demand_repositories
650
- repositories.where(download_policy: ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND)
650
+ repositories.on_demand
651
651
  end
652
652
 
653
653
  protected
@@ -43,7 +43,7 @@ module Katello
43
43
  end
44
44
 
45
45
  if attached_content_view_ids.include?(view.id)
46
- errors.add(:base, _("Duplicate Content View. Another component already includes this view"))
46
+ errors.add(:base, _("Another component already includes content view with ID %s" % view.id))
47
47
  end
48
48
  end
49
49
 
@@ -25,6 +25,7 @@ module Katello
25
25
  alias_method :version, :content_view_version
26
26
  alias_attribute :description, :notes
27
27
 
28
+ scoped_search :on => :id, :relation => :content_view_version, :rename => :content_view_version_id
28
29
  scoped_search :on => :name, :relation => :environment, :rename => :environment, :complete_value => true
29
30
 
30
31
  enum action: {
@@ -2,6 +2,7 @@ module Katello
2
2
  class ContentViewVersion < Katello::Model
3
3
  include Authorization::ContentViewVersion
4
4
  include ForemanTasks::Concerns::ActionSubject
5
+ include Katello::Concerns::SearchByRepositoryName
5
6
 
6
7
  define_model_callbacks :promote, :only => [:before, :after]
7
8
  audited :associations => [:repositories, :environments]
@@ -39,11 +40,15 @@ module Katello
39
40
  :class_name => "Katello::ContentViewVersionComponent"
40
41
  has_many :composites, :through => :content_view_version_composites, :source => :composite_version,
41
42
  :class_name => "Katello::ContentViewVersion", :inverse_of => :components
43
+ has_many :published_in_composite_content_views, through: :composites, source: :content_view
42
44
 
43
45
  delegate :default, :default?, to: :content_view
44
46
 
45
47
  validates_lengths_from_database
46
48
 
49
+ validates :minor, :uniqueness => {:scope => [:content_view_id, :major], :message => N_(", must be unique to major and version id version.")}
50
+ validates :minor, numericality: true
51
+
47
52
  scope :default_view, -> { joins(:content_view).where("#{Katello::ContentView.table_name}.default" => true) }
48
53
  scope :non_default_view, -> { joins(:content_view).where("#{Katello::ContentView.table_name}.default" => false) }
49
54
  scope :with_organization_id, ->(organization_id) do
@@ -57,7 +62,6 @@ module Katello
57
62
 
58
63
  scoped_search :on => :content_view_id, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
59
64
  scoped_search :on => :major, :rename => :version, :complete_value => true, :ext_method => :find_by_version
60
- scoped_search :relation => :repositories, :on => :name, :rename => :repository, :complete_value => true
61
65
 
62
66
  def self.find_by_version(_key, operator, value)
63
67
  conditions = ""
@@ -136,7 +140,7 @@ module Katello
136
140
  end
137
141
 
138
142
  def available_releases
139
- self.repositories.pluck(:minor).compact.uniq.sort
143
+ Katello::RootRepository.where(:id => self.repositories.select(:root_id)).pluck(:minor).compact.uniq.sort
140
144
  end
141
145
 
142
146
  def next_incremental_version
@@ -261,6 +265,14 @@ module Katello
261
265
  Katello::Rpm.in_repositories(self.repositories.archived).count
262
266
  end
263
267
 
268
+ def module_streams
269
+ ModuleStream.in_repositories(archived_repos)
270
+ end
271
+
272
+ def module_stream_count
273
+ Katello::ModuleStream.in_repositories(self.repositories.archived).count
274
+ end
275
+
264
276
  def file_count
265
277
  Katello::FileUnit.in_repositories(self.repositories.archived).count
266
278
  end