katello 4.4.2.2 → 4.5.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 (444) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +5 -1
  3. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +98 -0
  4. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +39 -3
  5. data/app/controllers/katello/api/v2/content_exports_controller.rb +19 -0
  6. data/app/controllers/katello/api/v2/content_imports_controller.rb +13 -16
  7. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +0 -12
  8. data/app/controllers/katello/api/v2/content_views_controller.rb +13 -0
  9. data/app/controllers/katello/api/v2/environments_controller.rb +1 -1
  10. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +8 -2
  11. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +25 -3
  12. data/app/controllers/katello/api/v2/organizations_controller.rb +4 -2
  13. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +1 -1
  14. data/app/controllers/katello/api/v2/repositories_controller.rb +9 -3
  15. data/app/controllers/katello/api/v2/repository_sets_controller.rb +40 -7
  16. data/app/controllers/katello/api/v2/subscriptions_controller.rb +2 -2
  17. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +1 -1
  18. data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +4 -0
  19. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +21 -3
  20. data/app/lib/actions/katello/alternate_content_source/create.rb +24 -0
  21. data/app/lib/actions/katello/alternate_content_source/destroy.rb +27 -0
  22. data/app/lib/actions/katello/alternate_content_source/update.rb +41 -0
  23. data/app/lib/actions/katello/cdn_configuration/update.rb +2 -2
  24. data/app/lib/actions/katello/content_view/destroy.rb +2 -1
  25. data/app/lib/actions/katello/content_view/incremental_updates.rb +7 -3
  26. data/app/lib/actions/katello/content_view/publish.rb +7 -9
  27. data/app/lib/actions/katello/content_view_version/auto_create_products.rb +4 -4
  28. data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +6 -4
  29. data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +6 -4
  30. data/app/lib/actions/katello/content_view_version/import.rb +25 -22
  31. data/app/lib/actions/katello/content_view_version/import_library.rb +0 -1
  32. data/app/lib/actions/katello/content_view_version/import_repository.rb +21 -0
  33. data/app/lib/actions/katello/content_view_version/incremental_update.rb +85 -93
  34. data/app/lib/actions/katello/content_view_version/reset_content_view_repositories_from_metadata.rb +2 -2
  35. data/app/lib/actions/katello/product/content_create.rb +10 -8
  36. data/app/lib/actions/katello/repository/destroy.rb +36 -12
  37. data/app/lib/actions/katello/repository_set/disable_repository.rb +8 -3
  38. data/app/lib/actions/pulp3/alternate_content_source/create.rb +20 -0
  39. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +20 -0
  40. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +16 -0
  41. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +16 -0
  42. data/app/lib/actions/pulp3/alternate_content_source/update.rb +16 -0
  43. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +17 -0
  44. data/app/lib/actions/pulp3/content_view_version/{import.rb → create_import.rb} +5 -5
  45. data/app/lib/actions/pulp3/content_view_version/create_importer.rb +4 -3
  46. data/app/lib/actions/pulp3/content_view_version/destroy_importer.rb +12 -1
  47. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +18 -0
  48. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +23 -0
  49. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +18 -0
  50. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +1 -1
  51. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +51 -0
  52. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +5 -2
  53. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +4 -1
  54. data/app/lib/actions/pulp3/repository/save_distribution_references.rb +2 -0
  55. data/app/lib/katello/api/v2/error_handling.rb +1 -0
  56. data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -1
  57. data/app/lib/katello/util/errata.rb +2 -3
  58. data/app/lib/katello/validators/alternate_content_source_path_validator.rb +29 -0
  59. data/app/lib/katello/validators/content_default_http_proxy_setting_validator.rb +12 -0
  60. data/app/lib/katello/validators/content_view_environment_validator.rb +10 -5
  61. data/app/models/katello/alternate_content_source.rb +66 -0
  62. data/app/models/katello/authorization/alternate_content_source.rb +33 -0
  63. data/app/models/katello/authorization/repository.rb +3 -3
  64. data/app/models/katello/candlepin/repository_mapper.rb +13 -6
  65. data/app/models/katello/cdn_configuration.rb +15 -15
  66. data/app/models/katello/concerns/content_facet_host_extensions.rb +25 -0
  67. data/app/models/katello/concerns/host_managed_extensions.rb +7 -5
  68. data/app/models/katello/concerns/http_proxy_extensions.rb +14 -0
  69. data/app/models/katello/concerns/organization_extensions.rb +4 -2
  70. data/app/models/katello/concerns/setting_extensions.rb +14 -0
  71. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  72. data/app/models/katello/content.rb +1 -0
  73. data/app/models/katello/content_credential.rb +6 -0
  74. data/app/models/katello/content_override.rb +7 -3
  75. data/app/models/katello/content_view.rb +33 -2
  76. data/app/models/katello/content_view_erratum_filter.rb +26 -12
  77. data/app/models/katello/content_view_filter.rb +4 -0
  78. data/app/models/katello/content_view_version.rb +12 -0
  79. data/app/models/katello/content_view_version_export_history.rb +3 -1
  80. data/app/models/katello/erratum.rb +9 -5
  81. data/app/models/katello/events/delete_latest_content_view_version.rb +40 -0
  82. data/app/models/katello/host/content_facet.rb +14 -0
  83. data/app/models/katello/host_available_module_stream.rb +12 -0
  84. data/app/models/katello/product_content.rb +1 -0
  85. data/app/models/katello/purpose_sla_status.rb +1 -1
  86. data/app/models/katello/purpose_status.rb +2 -2
  87. data/app/models/katello/repository.rb +7 -4
  88. data/app/models/katello/root_repository.rb +1 -1
  89. data/app/models/katello/smart_proxy_alternate_content_source.rb +8 -0
  90. data/app/models/katello/sync_plan.rb +1 -1
  91. data/app/presenters/katello/product_content_presenter.rb +15 -0
  92. data/app/services/katello/applicable_host_queue.rb +1 -1
  93. data/app/services/katello/content_unit_indexer.rb +2 -1
  94. data/app/services/katello/product_content_finder.rb +12 -2
  95. data/app/services/katello/pulp3/alternate_content_source.rb +117 -0
  96. data/app/services/katello/pulp3/api/file.rb +8 -0
  97. data/app/services/katello/pulp3/api/yum.rb +8 -0
  98. data/app/services/katello/pulp3/content_view_version/export.rb +27 -5
  99. data/app/services/katello/pulp3/content_view_version/import.rb +97 -71
  100. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +4 -4
  101. data/app/services/katello/pulp3/content_view_version/import_gpg_keys.rb +13 -11
  102. data/app/services/katello/pulp3/content_view_version/import_validator.rb +67 -72
  103. data/app/services/katello/pulp3/content_view_version/importable_products.rb +40 -24
  104. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +88 -39
  105. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +2 -2
  106. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +117 -0
  107. data/app/services/katello/pulp3/pulp_content_unit.rb +6 -1
  108. data/app/services/katello/pulp3/repository/yum.rb +70 -12
  109. data/app/services/katello/pulp3/repository.rb +7 -91
  110. data/app/services/katello/pulp3/service_common.rb +66 -0
  111. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +4 -1
  112. data/app/services/katello/ui_notifications/content_view/delete_latest_version_failure.rb +22 -0
  113. data/app/views/foreman/job_templates/change_content_source.erb +1 -1
  114. data/app/views/foreman/job_templates/install_errata.erb +5 -5
  115. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +7 -6
  116. data/app/views/foreman/job_templates/install_group.erb +4 -4
  117. data/app/views/foreman/job_templates/install_package.erb +4 -4
  118. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +3 -3
  119. data/app/views/foreman/job_templates/remove_group.erb +4 -4
  120. data/app/views/foreman/job_templates/remove_package.erb +4 -4
  121. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +3 -3
  122. data/app/views/foreman/job_templates/resolve_traces.erb +2 -2
  123. data/app/views/foreman/job_templates/restart_services.erb +3 -3
  124. data/app/views/foreman/job_templates/update_group.erb +4 -4
  125. data/app/views/foreman/job_templates/update_package.erb +4 -4
  126. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +3 -3
  127. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +15 -0
  128. data/app/views/katello/api/v2/alternate_content_sources/index.json.rabl +7 -0
  129. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +3 -0
  130. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
  131. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +2 -3
  132. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +1 -1
  133. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  134. data/app/views/katello/api/v2/environments/show.json.rabl +2 -0
  135. data/app/views/katello/api/v2/errata/_counts.json.rabl +2 -2
  136. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +2 -2
  137. data/app/views/katello/api/v2/hosts/host_collections.json.rabl +1 -1
  138. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -1
  139. data/app/views/katello/api/v2/repositories/show.json.rabl +2 -1
  140. data/app/views/katello/sync_management/_repo.html.erb +8 -29
  141. data/config/routes/api/v2.rb +7 -0
  142. data/db/migrate/20150930183738_migrate_content_hosts.rb +0 -399
  143. data/db/migrate/20171025163149_remove_use_pulp_oauth_setting.rb +1 -1
  144. data/db/migrate/20171114150937_cleanup_installed_packages.rb +1 -1
  145. data/db/migrate/20180402160223_clean_up_force_post_sync_action_setting.rb +1 -1
  146. data/db/migrate/20211129200124_remove_dependency_solving_algorithm_setting.rb +1 -1
  147. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +10 -12
  148. data/db/migrate/20220110223754_update_disconnected_settings.rb +5 -5
  149. data/db/migrate/20220117151612_add_alternate_content_sources.rb +48 -0
  150. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +9 -4
  151. data/db/migrate/20220209203251_add_generated_for_to_content_views.rb +13 -0
  152. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +7 -7
  153. data/db/migrate/20220228173251_remove_drpm_from_ignorable_content.rb +12 -0
  154. data/db/migrate/20220404190836_delete_old_setting_data.rb +9 -0
  155. data/db/migrate/20220405220616_update_cdn_configuration_type.rb +11 -0
  156. data/db/migrate/20220419193414_content_settings_to_dsl_category.rb +5 -0
  157. data/db/seeds.d/110-content-view-autopublish.rb +13 -0
  158. data/db/seeds.d/150-module_job_templates.rb +1 -1
  159. data/engines/bastion/README.md +1 -0
  160. data/engines/bastion/app/assets/javascripts/bastion/components/bst-modal.directive.js +1 -0
  161. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -0
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +4 -2
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +10 -5
  164. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +1 -0
  165. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -0
  166. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +1 -0
  167. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
  168. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
  169. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +8 -0
  170. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +4 -2
  171. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  172. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/content.service.js +10 -0
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-deb-repositories.html +26 -0
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-debs.html +27 -0
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.routes.js +22 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +13 -7
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +63 -17
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +7 -8
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +10 -1
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +21 -3
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +8 -9
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +7 -5
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +2 -1
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery-create.controller.js +1 -1
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +1 -1
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +1 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +6 -1
  189. data/lib/katello/engine.rb +1 -5
  190. data/lib/katello/permission_creator.rb +32 -4
  191. data/lib/katello/plugin.rb +378 -4
  192. data/lib/katello/tasks/reset.rake.bak +67 -0
  193. data/lib/katello/tasks/update_content_default_http_proxy.rake +2 -3
  194. data/lib/katello/version.rb +1 -1
  195. data/locale/action_names.rb +47 -41
  196. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  197. data/locale/bn/katello.po +820 -106
  198. data/locale/bn/katello.po.time_stamp +0 -0
  199. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/cs/katello.po +818 -104
  201. data/locale/cs/katello.po.time_stamp +0 -0
  202. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  203. data/locale/de/katello.po +893 -179
  204. data/locale/de/katello.po.time_stamp +0 -0
  205. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/en/katello.po +817 -103
  207. data/locale/en/katello.po.time_stamp +0 -0
  208. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  209. data/locale/es/katello.po +882 -168
  210. data/locale/es/katello.po.time_stamp +0 -0
  211. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/fr/katello.po +1219 -505
  213. data/locale/fr/katello.po.time_stamp +0 -0
  214. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  215. data/locale/gu/katello.po +826 -112
  216. data/locale/gu/katello.po.time_stamp +0 -0
  217. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  218. data/locale/hi/katello.po +826 -112
  219. data/locale/hi/katello.po.time_stamp +0 -0
  220. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  221. data/locale/it/katello.po +863 -148
  222. data/locale/it/katello.po.time_stamp +0 -0
  223. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  224. data/locale/ja/katello.po +1216 -499
  225. data/locale/ja/katello.po.time_stamp +0 -0
  226. data/locale/katello.pot +3847 -2507
  227. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  228. data/locale/kn/katello.po +826 -112
  229. data/locale/kn/katello.po.time_stamp +0 -0
  230. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  231. data/locale/ko/katello.po +912 -198
  232. data/locale/ko/katello.po.time_stamp +0 -0
  233. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  234. data/locale/mr/katello.po +826 -112
  235. data/locale/mr/katello.po.time_stamp +0 -0
  236. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  237. data/locale/or/katello.po +826 -112
  238. data/locale/or/katello.po.time_stamp +0 -0
  239. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  240. data/locale/pa/katello.po +826 -112
  241. data/locale/pa/katello.po.time_stamp +0 -0
  242. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  243. data/locale/pt/katello.po +817 -103
  244. data/locale/pt/katello.po.time_stamp +0 -0
  245. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  246. data/locale/pt_BR/katello.po +879 -165
  247. data/locale/pt_BR/katello.po.time_stamp +0 -0
  248. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  249. data/locale/ru/katello.po +927 -213
  250. data/locale/ru/katello.po.time_stamp +0 -0
  251. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  252. data/locale/ta/katello.po +820 -106
  253. data/locale/ta/katello.po.time_stamp +0 -0
  254. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  255. data/locale/te/katello.po +826 -112
  256. data/locale/te/katello.po.time_stamp +0 -0
  257. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  258. data/locale/zh_CN/katello.po +1202 -486
  259. data/locale/zh_CN/katello.po.time_stamp +0 -0
  260. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  261. data/locale/zh_TW/katello.po +856 -142
  262. data/locale/zh_TW/katello.po.time_stamp +0 -0
  263. data/webpack/components/EditableTextInput/EditableTextInput.js +20 -5
  264. data/webpack/components/Errata/index.js +38 -8
  265. data/webpack/components/Packages/index.js +1 -4
  266. data/webpack/components/Search/Search.js +18 -3
  267. data/webpack/components/SelectAllCheckbox/index.js +1 -0
  268. data/webpack/components/SelectableDropdown/SelectableDropdown.js +4 -2
  269. data/webpack/components/Table/EmptyStateMessage.js +21 -7
  270. data/webpack/components/Table/MainTable.js +29 -4
  271. data/webpack/components/Table/TableHooks.js +63 -19
  272. data/webpack/components/Table/TableWrapper.js +4 -2
  273. data/webpack/components/Table/components/SortableColumnHeaders.js +19 -0
  274. data/webpack/components/Table/components/TranslatedPlural.js +57 -0
  275. data/webpack/components/TypeAhead/TypeAhead.js +8 -0
  276. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +13 -11
  277. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +5 -2
  278. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +27 -0
  279. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +256 -0
  280. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +202 -0
  281. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +19 -0
  282. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewConstants.js +2 -0
  283. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/changeHostCVModal.test.js +131 -0
  284. data/webpack/components/extensions/HostDetails/Cards/{__tests__ → ContentViewDetailsCard/__tests__}/contentViewDetailsCard.test.js +22 -0
  285. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViews.fixtures.json +443 -0
  286. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/envPaths.fixtures.json +320 -0
  287. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +57 -33
  288. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +3 -0
  289. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsActions.js +30 -0
  290. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +187 -0
  291. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsConstants.js +7 -0
  292. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +227 -0
  293. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsSelectors.js +18 -0
  294. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/availableHostCollections.fixtures.json +106 -0
  295. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +110 -0
  296. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +235 -0
  297. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/removableHostCollections.fixtures.json +45 -0
  298. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +33 -8
  299. data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +44 -0
  300. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +107 -0
  301. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +38 -0
  302. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +62 -39
  303. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataActions.js +1 -7
  304. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +1 -3
  305. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +28 -0
  306. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +486 -116
  307. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +147 -1
  308. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +6 -3
  309. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/HostPackagesActions.js +1 -7
  310. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +2 -1
  311. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +48 -19
  312. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +35 -47
  313. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
  314. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsActions.js +33 -54
  315. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsConstants.js +20 -0
  316. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +269 -132
  317. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +47 -11
  318. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +30 -42
  319. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +36 -1
  320. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +94 -46
  321. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +18 -2
  322. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +6 -0
  323. data/webpack/containers/Application/config.js +5 -0
  324. data/webpack/global_index.js +30 -7
  325. data/webpack/global_test_setup.js +13 -0
  326. data/webpack/redux/actions/RedHatRepositories/enabled.js +2 -1
  327. data/webpack/redux/actions/RedHatRepositories/helpers.js +9 -8
  328. data/webpack/scenes/AlternateContentSources/ACSActions.js +53 -0
  329. data/webpack/scenes/AlternateContentSources/ACSConstants.js +4 -0
  330. data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +23 -0
  331. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -0
  332. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +152 -0
  333. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsIndex.fixtures.json +91 -0
  334. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +67 -0
  335. data/webpack/scenes/AlternateContentSources/index.js +4 -0
  336. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -0
  337. data/webpack/scenes/Content/Table/ContentTable.js +1 -0
  338. data/webpack/scenes/ContentViews/ContentViewsActions.js +6 -2
  339. data/webpack/scenes/ContentViews/ContentViewsConstants.js +11 -3
  340. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +2 -1
  341. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +10 -1
  342. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +4 -3
  343. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +1 -1
  344. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +7 -5
  345. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionFinish.js +29 -21
  346. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +15 -8
  347. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -3
  348. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +4 -4
  349. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +3 -1
  350. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +4 -4
  351. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +34 -8
  352. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +33 -29
  353. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +130 -79
  354. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +17 -3
  355. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +2 -1
  356. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +2 -1
  357. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +6 -1
  358. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +41 -21
  359. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +38 -20
  360. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +2 -0
  361. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +8 -1
  362. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +9 -1
  363. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
  364. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +1 -0
  365. data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +27 -12
  366. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +39 -17
  367. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +27 -10
  368. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +46 -23
  369. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +3 -2
  370. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +5 -2
  371. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +161 -108
  372. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +7 -7
  373. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewRepoAdd.fixture.json +1 -0
  374. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +58 -0
  375. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteContextWrapper.js +45 -0
  376. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteHelpers.js +30 -0
  377. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteModal.js +56 -0
  378. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ConfirmBulkDelete.js +126 -0
  379. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/FinishBulkDelete.js +61 -0
  380. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +196 -0
  381. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +220 -0
  382. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +104 -0
  383. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +122 -0
  384. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteVersions.fixtures.json +600 -0
  385. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentView.fixtures.json +1504 -0
  386. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentViewVersion.fixtures.json +936 -0
  387. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/environmentPaths.fixtures.json +261 -0
  388. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +163 -0
  389. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/bulkDeleteSteps.js +79 -0
  390. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +192 -167
  391. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +2 -5
  392. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js +38 -53
  393. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +1 -1
  394. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -12
  395. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -0
  396. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -0
  397. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +1 -0
  398. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +8 -20
  399. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +23 -13
  400. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +3 -0
  401. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +4 -4
  402. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +0 -3
  403. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +4 -4
  404. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +12 -14
  405. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
  406. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +96 -117
  407. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +13 -19
  408. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +9 -20
  409. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +165 -148
  410. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +2 -0
  411. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +4 -4
  412. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +14 -3
  413. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
  414. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +4 -3
  415. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +9 -5
  416. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +6 -1
  417. data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +40 -35
  418. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  419. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +1 -1
  420. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +4 -4
  421. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +1 -1
  422. data/webpack/scenes/ContentViews/helpers.js +3 -0
  423. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +5 -0
  424. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +3 -3
  425. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +2 -1
  426. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/EnabledRepository.test.js +2 -0
  427. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +3 -3
  428. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +2 -0
  429. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{AirGappedTypeForm.js → ExportSyncForm.js} +7 -6
  430. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{UpstreamServerTypeForm.js → NetworkSyncForm.js} +15 -7
  431. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{AirGappedTypeForm.test.js → ExportSyncForm.test.js} +4 -4
  432. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{UpstreamServerTypeForm.test.js → NetworkSyncForm.test.js} +8 -8
  433. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +11 -11
  434. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +1 -0
  435. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +8 -7
  436. data/webpack/scenes/Tasks/TaskActions.js +6 -0
  437. data/webpack/scenes/Tasks/TaskSelectors.js +11 -0
  438. data/webpack/scenes/Tasks/helpers.js +33 -5
  439. data/webpack/utils/helpers.js +2 -0
  440. metadata +158 -40
  441. data/app/models/setting/content.rb +0 -201
  442. data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
  443. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +0 -96
  444. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +0 -36
@@ -205,9 +205,7 @@ module Katello
205
205
  return [] unless new_host.operatingsystem.is_a?(Redhat)
206
206
 
207
207
  if (host.is_a? ::Hostgroup)
208
- new_host.content_facet = ::Katello::Host::ContentFacet.new(:lifecycle_environment_id => host.inherited_lifecycle_environment_id,
209
- :content_view_id => host.inherited_content_view_id,
210
- :content_source_id => host.inherited_content_source_id)
208
+ new_host.content_facet = hostgroup_content_facet(host, param_host)
211
209
  elsif host.content_facet.present?
212
210
  new_host.content_facet = ::Katello::Host::ContentFacet.new(:lifecycle_environment_id => host.content_facet.lifecycle_environment_id,
213
211
  :content_view_id => host.content_facet.content_view_id,
@@ -270,5 +268,25 @@ module Katello
270
268
  def hosts_change_content_source
271
269
  [{ action: [_('Change Content Source'), '/change_host_content_source', false], priority: 100 }]
272
270
  end
271
+
272
+ private
273
+
274
+ def hostgroup_content_facet(hostgroup, param_host)
275
+ lifecycle_environment_id = hostgroup.inherited_lifecycle_environment_id
276
+ content_view_id = hostgroup.inherited_content_view_id
277
+ content_source_id = hostgroup.inherited_content_source_id
278
+ if param_host.lifecycle_environment_id && (hostgroup.inherited_lifecycle_environment_id != param_host.lifecycle_environment_id)
279
+ lifecycle_environment_id = param_host.lifecycle_environment_id
280
+ end
281
+ if param_host.content_view_id && (hostgroup.inherited_content_view_id != param_host.content_view_id)
282
+ content_view_id = param_host.content_view_id
283
+ end
284
+ if param_host.content_source_id && (hostgroup.inherited_content_source_id != param_host.content_source_id)
285
+ content_source_id = param_host.content_source_id
286
+ end
287
+ ::Katello::Host::ContentFacet.new(:lifecycle_environment_id => lifecycle_environment_id,
288
+ :content_view_id => content_view_id,
289
+ :content_source_id => content_source_id)
290
+ end
273
291
  end
274
292
  end
@@ -0,0 +1,24 @@
1
+ module Actions
2
+ module Katello
3
+ module AlternateContentSource
4
+ class Create < Actions::EntryAction
5
+ def plan(acs, smart_proxies)
6
+ acs.save!
7
+ action_subject(acs)
8
+ smart_proxies = smart_proxies.uniq
9
+ concurrence do
10
+ smart_proxies.each do |smart_proxy|
11
+ ::Katello::SmartProxyAlternateContentSource.create(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id)
12
+ plan_action(Pulp3::Orchestration::AlternateContentSource::Create,
13
+ acs, smart_proxy)
14
+ end
15
+ end
16
+ end
17
+
18
+ def humanized_name
19
+ _("Create Alternate Content Source")
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ module Actions
2
+ module Katello
3
+ module AlternateContentSource
4
+ class Destroy < Actions::EntryAction
5
+ def plan(acs)
6
+ action_subject(acs)
7
+ sequence do
8
+ acs.smart_proxies.each do |smart_proxy|
9
+ plan_action(Pulp3::Orchestration::AlternateContentSource::Delete,
10
+ acs, smart_proxy)
11
+ end
12
+ plan_self(:acs_id => acs.id)
13
+ end
14
+ end
15
+
16
+ def finalize
17
+ acs = ::Katello::AlternateContentSource.find_by(id: input[:acs_id])
18
+ acs.destroy
19
+ end
20
+
21
+ def humanized_name
22
+ _("Destroy Alternate Content Source")
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,41 @@
1
+ module Actions
2
+ module Katello
3
+ module AlternateContentSource
4
+ class Update < Actions::EntryAction
5
+ # smart_proxies ALWAYS represents the smart proxies to remain associated
6
+ # after the action runs. If smart_proxies == [], there will be none afterwards.
7
+ def plan(acs, smart_proxies, acs_params)
8
+ action_subject(acs)
9
+ acs.update!(acs_params)
10
+
11
+ smart_proxies = smart_proxies.uniq
12
+ smart_proxies_to_add = smart_proxies - acs.smart_proxies
13
+ smart_proxies_to_delete = acs.smart_proxies - smart_proxies
14
+ smart_proxies_to_update = smart_proxies & acs.smart_proxies
15
+
16
+ concurrence do
17
+ smart_proxies_to_add&.each do |smart_proxy|
18
+ ::Katello::SmartProxyAlternateContentSource.create(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id)
19
+ plan_action(Pulp3::Orchestration::AlternateContentSource::Create,
20
+ acs, smart_proxy)
21
+ end
22
+
23
+ smart_proxies_to_delete&.each do |smart_proxy|
24
+ plan_action(Pulp3::Orchestration::AlternateContentSource::Delete,
25
+ acs, smart_proxy)
26
+ end
27
+
28
+ smart_proxies_to_update&.each do |smart_proxy|
29
+ plan_action(Pulp3::Orchestration::AlternateContentSource::Update,
30
+ acs, smart_proxy)
31
+ end
32
+ end
33
+ end
34
+
35
+ def humanized_name
36
+ _("Update Alternate Content Source")
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -5,7 +5,7 @@ module Actions
5
5
  def plan(cdn_configuration, options)
6
6
  cdn_configuration.update!(options)
7
7
 
8
- if cdn_configuration.upstream_server?
8
+ if cdn_configuration.network_sync?
9
9
  resource = ::Katello::Resources::CDN::CdnResource.create(cdn_configuration: cdn_configuration)
10
10
  resource.validate!
11
11
  keypair = resource.debug_certificate
@@ -20,7 +20,7 @@ module Actions
20
20
  roots.each do |root|
21
21
  full_path = if cdn_configuration.redhat_cdn?
22
22
  root.product.repo_url(root.library_instance.generate_content_path)
23
- elsif cdn_configuration.upstream_server?
23
+ elsif cdn_configuration.network_sync?
24
24
  resource.repository_url(content_label: root.content.label)
25
25
  end
26
26
  plan_action(::Actions::Katello::Repository::Update, root, url: full_path)
@@ -25,7 +25,8 @@ module Actions
25
25
  end
26
26
 
27
27
  def finalize
28
- content_view = ::Katello::ContentView.find(input[:content_view][:id])
28
+ content_view = ::Katello::ContentView.where(id: input[:content_view][:id]).first
29
+ return if content_view.blank?
29
30
  content_view.content_view_repositories.each(&:destroy)
30
31
  content_view.destroy!
31
32
  end
@@ -13,6 +13,11 @@ module Actions
13
13
  concurrence do
14
14
  version_environments.each do |version_environment|
15
15
  version = version_environment[:content_view_version]
16
+ if version.content_view.generated?
17
+ fail _("Cannot perform an incremental update on a Generated Content View Version (%{name} version version %{version}") %
18
+ {:name => version.content_view.name, :version => version.version}
19
+ end
20
+
16
21
  if version.content_view.composite?
17
22
  fail _("Cannot perform an incremental update on a Composite Content View Version (%{name} version version %{version}") %
18
23
  {:name => version.content_view.name, :version => version.version}
@@ -53,9 +58,8 @@ module Actions
53
58
 
54
59
  action = plan_action(ContentViewVersion::IncrementalUpdate, composite_version, environments,
55
60
  :new_components => new_components, :description => description)
56
- unless SmartProxy.pulp_primary.pulp3_repository_type_support?("yum")
57
- output_for_version_ids << {:version_id => action.new_content_view_version.id, :output => action.output}
58
- end
61
+
62
+ output_for_version_ids << {:version_id => action.new_content_view_version_id, :output => action.output}
59
63
  end
60
64
  end
61
65
  end
@@ -90,19 +90,13 @@ module Actions
90
90
  end
91
91
 
92
92
  def run
93
- metadata = {
94
- description: _("Auto Publish - Triggered by '%s'") % input[:content_view_version_name],
95
- triggered_by: input[:content_view_version_id]
96
- }
97
- input[:auto_publish_composite_ids].each do |composite_id|
98
- ::Katello::EventQueue.push_event(::Katello::Events::AutoPublishCompositeView::EVENT_TYPE, composite_id) do |attrs|
99
- attrs[:metadata] = metadata
100
- end
101
- end
93
+ version = ::Katello::ContentViewVersion.find(input[:content_view_version_id])
94
+ version.auto_publish_composites!
102
95
 
103
96
  output[:content_view_id] = input[:content_view_id]
104
97
  output[:content_view_version_id] = input[:content_view_version_id]
105
98
  output[:skip_promotion] = input[:skip_promotion]
99
+ output[:history_id] = input[:history_id]
106
100
  end
107
101
 
108
102
  def rescue_strategy_for_self
@@ -142,6 +136,10 @@ module Actions
142
136
  input['content_view_version_name']
143
137
  end
144
138
 
139
+ def history_id
140
+ input['history_id']
141
+ end
142
+
145
143
  private
146
144
 
147
145
  def include_other_components(override_components, content_view)
@@ -2,14 +2,14 @@ module Actions
2
2
  module Katello
3
3
  module ContentViewVersion
4
4
  class AutoCreateProducts < Actions::Base
5
- def plan(organization:, metadata:)
5
+ def plan(import:)
6
6
  helper = ::Katello::Pulp3::ContentViewVersion::ImportableProducts.
7
- new(organization: organization,
8
- metadata: metadata)
7
+ new(organization: import.organization,
8
+ metadata_products: import.metadata_map.products)
9
9
  helper.generate!
10
10
  concurrence do
11
11
  helper.creatable.each do |product|
12
- plan_action(::Actions::Katello::Product::Create, product[:product], organization)
12
+ plan_action(::Actions::Katello::Product::Create, product[:product], import.organization)
13
13
  end
14
14
  helper.updatable.each do |product|
15
15
  plan_action(::Actions::Katello::Product::Update, product[:product], product[:options])
@@ -2,11 +2,13 @@ module Actions
2
2
  module Katello
3
3
  module ContentViewVersion
4
4
  class AutoCreateRedhatRepositories < Actions::Base
5
- def plan(organization:, metadata:)
6
- helper = ::Katello::Pulp3::ContentViewVersion::ImportableRepositories.
7
- new(organization: organization,
8
- metadata: metadata, redhat: true)
5
+ def plan(import:)
6
+ helper = ::Katello::Pulp3::ContentViewVersion::ImportableRepositories.new(
7
+ organization: import.organization,
8
+ metadata_repositories: import.metadata_map.repositories.select { |r| r.redhat }
9
+ )
9
10
  helper.generate!
11
+
10
12
  sequence do
11
13
  helper.creatable.each do |root|
12
14
  plan_action(::Actions::Katello::RepositorySet::EnableRepository, root[:product], root[:content], root[:substitutions])
@@ -2,11 +2,13 @@ module Actions
2
2
  module Katello
3
3
  module ContentViewVersion
4
4
  class AutoCreateRepositories < Actions::Base
5
- def plan(organization:, metadata:)
6
- helper = ::Katello::Pulp3::ContentViewVersion::ImportableRepositories.
7
- new(organization: organization,
8
- metadata: metadata)
5
+ def plan(import:)
6
+ helper = ::Katello::Pulp3::ContentViewVersion::ImportableRepositories.new(
7
+ organization: import.organization,
8
+ metadata_repositories: import.metadata_map.repositories.select { |r| !r.redhat }
9
+ )
9
10
  helper.generate!
11
+
10
12
  sequence do
11
13
  helper.creatable.each do |root|
12
14
  plan_action(::Actions::Katello::Repository::CreateRoot, root[:repository])
@@ -2,38 +2,41 @@ module Actions
2
2
  module Katello
3
3
  module ContentViewVersion
4
4
  class Import < Actions::EntryAction
5
- def plan(organization:, path:, metadata:, library: false)
6
- fail _("Content view not provided in the metadata") if metadata[:content_view].blank?
7
- content_view = ::Katello::Pulp3::ContentViewVersion::Import.
8
- find_or_create_import_view(organization: organization,
9
- metadata: metadata[:content_view],
10
- library: library)
11
- content_view.check_ready_to_import!
12
- ::Katello::Pulp3::ContentViewVersion::Import.check!(content_view: content_view,
13
- metadata: metadata,
14
- path: path,
15
- smart_proxy: SmartProxy.pulp_primary!)
5
+ def plan(organization:, path:, metadata:)
6
+ metadata_map = ::Katello::Pulp3::ContentViewVersion::MetadataMap.new(metadata: metadata)
16
7
 
17
- major = metadata[:content_view_version][:major]
18
- minor = metadata[:content_view_version][:minor]
19
- description = metadata[:content_view_version][:description]
8
+ import = ::Katello::Pulp3::ContentViewVersion::Import.new(
9
+ organization: organization,
10
+ metadata_map: metadata_map,
11
+ path: path,
12
+ smart_proxy: SmartProxy.pulp_primary!
13
+ )
14
+
15
+ import.check!
20
16
 
21
17
  gpg_helper = ::Katello::Pulp3::ContentViewVersion::ImportGpgKeys.
22
18
  new(organization: organization,
23
- metadata: metadata)
19
+ metadata_gpg_keys: metadata_map.gpg_keys)
24
20
  gpg_helper.import!
25
21
 
26
22
  sequence do
27
- plan_action(AutoCreateProducts, organization: content_view.organization, metadata: metadata)
28
- plan_action(AutoCreateRepositories, organization: content_view.organization, metadata: metadata)
29
- plan_action(AutoCreateRedhatRepositories, organization: content_view.organization, metadata: metadata)
30
- plan_action(ResetContentViewRepositoriesFromMetadata, content_view: content_view, metadata: metadata)
31
- plan_action(::Actions::Katello::ContentView::Publish, content_view, description,
23
+ plan_action(AutoCreateProducts, import: import)
24
+ plan_action(AutoCreateRepositories, import: import)
25
+ plan_action(AutoCreateRedhatRepositories, import: import)
26
+ plan_action(ResetContentViewRepositoriesFromMetadata, import: import)
27
+ plan_action(::Actions::Katello::ContentView::Publish, import.content_view, metadata_map.content_view_version.description,
32
28
  path: path,
33
29
  metadata: metadata,
34
30
  importing: true,
35
- major: major,
36
- minor: minor)
31
+ major: metadata_map.content_view_version.major,
32
+ minor: metadata_map.content_view_version.minor)
33
+ plan_self(content_view_id: import.content_view.id)
34
+ end
35
+ end
36
+
37
+ def finalize
38
+ if task.execution_plan.run_steps.any? { |s| s.action_class == ::Actions::Pulp3::ContentViewVersion::CreateImport && s.state != :success }
39
+ ::Katello::EventQueue.push_event(::Katello::Events::DeleteLatestContentViewVersion::EVENT_TYPE, input[:content_view_id])
37
40
  end
38
41
  end
39
42
 
@@ -5,7 +5,6 @@ module Actions
5
5
  def plan(organization, path:, metadata:)
6
6
  action_subject(organization)
7
7
  plan_action(::Actions::Katello::ContentViewVersion::Import, organization: organization,
8
- library: true,
9
8
  path: path,
10
9
  metadata: metadata)
11
10
  end
@@ -0,0 +1,21 @@
1
+ module Actions
2
+ module Katello
3
+ module ContentViewVersion
4
+ class ImportRepository < Actions::EntryAction
5
+ def plan(organization, path:, metadata:)
6
+ action_subject(organization)
7
+ sequence do
8
+ plan_action(::Actions::Katello::ContentViewVersion::Import,
9
+ organization: organization,
10
+ path: path,
11
+ metadata: metadata)
12
+ end
13
+ end
14
+
15
+ def humanized_name
16
+ _("Import Repository")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -3,7 +3,7 @@ module Actions
3
3
  module ContentViewVersion
4
4
  class IncrementalUpdate < Actions::EntryAction
5
5
  include ::Katello::ContentViewHelper
6
- attr_accessor :new_content_view_version
6
+ attr_accessor :new_content_view_version, :new_content_view_version_id
7
7
 
8
8
  HUMANIZED_TYPES = {
9
9
  ::Katello::Erratum::CONTENT_TYPE => "Errata",
@@ -18,6 +18,7 @@ module Actions
18
18
  # rubocop:disable Metrics/MethodLength
19
19
  # rubocop:disable Metrics/AbcSize
20
20
  # rubocop:disable Metrics/CyclomaticComplexity
21
+ # rubocop:disable Metrics/PerceivedComplexity
21
22
  def plan(old_version, environments, options = {})
22
23
  dep_solve = options.fetch(:resolve_dependencies, true)
23
24
  description = options.fetch(:description, '')
@@ -31,85 +32,93 @@ module Actions
31
32
  validate_environments(environments, old_version)
32
33
 
33
34
  new_minor = old_version.content_view.versions.where(:major => old_version.major).maximum(:minor) + 1
34
- if SmartProxy.pulp_primary.pulp3_repository_type_support?("yum") && is_composite
35
+
36
+ if is_composite
35
37
  sequence do
36
38
  publish_action = plan_action(::Actions::Katello::ContentView::Publish, old_version.content_view, description,
37
39
  :major => old_version.major, :minor => new_minor,
38
40
  :override_components => new_components, :skip_promotion => true)
41
+
42
+ self.new_content_view_version_id = publish_action.content_view_version_id
43
+ plan_self(:is_composite => true, :content_view_id => old_version.content_view.id,
44
+ :new_content_view_version_id => publish_action.content_view_version_id,
45
+ :environment_ids => environments.map(&:id), :user_id => ::User.current.id,
46
+ :history_id => publish_action.history_id,
47
+ :old_version => old_version.id)
48
+
39
49
  if old_version.environments.present?
40
50
  plan_action(::Actions::Katello::ContentView::Promote, publish_action.version,
41
51
  old_version.environments, true, description)
42
52
  end
43
53
  end
44
- return
45
- end
46
-
47
- self.new_content_view_version = old_version.content_view.create_new_version(old_version.major, new_minor, all_components)
48
- history = ::Katello::ContentViewHistory.create!(:content_view_version => new_content_view_version, :user => ::User.current.login,
49
- :action => ::Katello::ContentViewHistory.actions[:publish],
50
- :status => ::Katello::ContentViewHistory::IN_PROGRESS, :task => self.task,
51
- :notes => description)
54
+ else
55
+ self.new_content_view_version = old_version.content_view.create_new_version(old_version.major, new_minor, all_components)
56
+ history = ::Katello::ContentViewHistory.create!(:content_view_version => new_content_view_version, :user => ::User.current.login,
57
+ :action => ::Katello::ContentViewHistory.actions[:publish],
58
+ :status => ::Katello::ContentViewHistory::IN_PROGRESS, :task => self.task,
59
+ :notes => description)
52
60
 
53
- copy_action_outputs = []
54
- repos_to_clone = repos_to_copy(old_version, new_components)
61
+ copy_action_outputs = []
62
+ repos_to_clone = repos_to_copy(old_version, new_components)
55
63
 
56
- sequence do
57
- repository_mapping = plan_action(ContentViewVersion::CreateRepos, new_content_view_version, repos_to_clone).repository_mapping
58
- separated_repo_map = separated_repo_mapping(repository_mapping, true)
59
-
60
- repos_to_clone.each do |source_repos|
61
- plan_action(Repository::CloneToVersion,
62
- source_repos,
63
- new_content_view_version,
64
- repository_mapping[source_repos],
65
- incremental: true)
66
- end
64
+ sequence do
65
+ repository_mapping = plan_action(ContentViewVersion::CreateRepos, new_content_view_version, repos_to_clone).repository_mapping
66
+ separated_repo_map = separated_repo_mapping(repository_mapping, true)
67
+
68
+ repos_to_clone.each do |source_repos|
69
+ plan_action(Repository::CloneToVersion,
70
+ source_repos,
71
+ new_content_view_version,
72
+ repository_mapping[source_repos],
73
+ incremental: true)
74
+ end
67
75
 
68
- concurrence do
69
- if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
70
- extended_repo_mapping = pulp3_repo_mapping(separated_repo_map[:pulp3_yum_multicopy], old_version)
71
- unit_map = pulp3_content_mapping(content)
72
-
73
- unless extended_repo_mapping.empty? || unit_map.values.flatten.empty?
74
- sequence do
75
- # Pre-copy content if dest_repo is a soft copy of its library instance.
76
- # Don't use extended_repo_mapping because the source repositories are library instances.
77
- # We want the old CV snapshot repositories here so as to not pull in excess new content.
78
- separated_repo_map[:pulp3_yum_multicopy].each do |source_repos, dest_repo|
79
- if dest_repo.soft_copy_of_library?
80
- source_repos.each do |source_repo|
81
- # remove_all flag is set to cover the case of incrementally updating more than once with different content.
82
- # Without it, content from the previous incremental update will be copied as well due to how Pulp repo versions work.
83
- plan_action(Pulp3::Repository::CopyContent, source_repo, SmartProxy.pulp_primary, dest_repo, copy_all: true, remove_all: true)
76
+ concurrence do
77
+ if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
78
+ extended_repo_mapping = pulp3_repo_mapping(separated_repo_map[:pulp3_yum_multicopy], old_version)
79
+ unit_map = pulp3_content_mapping(content)
80
+
81
+ unless extended_repo_mapping.empty? || unit_map.values.flatten.empty?
82
+ sequence do
83
+ # Pre-copy content if dest_repo is a soft copy of its library instance.
84
+ # Don't use extended_repo_mapping because the source repositories are library instances.
85
+ # We want the old CV snapshot repositories here so as to not pull in excess new content.
86
+ separated_repo_map[:pulp3_yum_multicopy].each do |source_repos, dest_repo|
87
+ if dest_repo.soft_copy_of_library?
88
+ source_repos.each do |source_repo|
89
+ # remove_all flag is set to cover the case of incrementally updating more than once with different content.
90
+ # Without it, content from the previous incremental update will be copied as well due to how Pulp repo versions work.
91
+ plan_action(Pulp3::Repository::CopyContent, source_repo, SmartProxy.pulp_primary, dest_repo, copy_all: true, remove_all: true)
92
+ end
84
93
  end
85
94
  end
86
- end
87
- copy_action_outputs << plan_action(Pulp3::Repository::MultiCopyUnits, extended_repo_mapping, unit_map,
88
- dependency_solving: dep_solve).output
89
- repos_to_clone.each do |source_repos|
90
- if separated_repo_map[:pulp3_yum_multicopy].keys.include?(source_repos)
91
- copy_repos(repository_mapping[source_repos])
95
+ copy_action_outputs << plan_action(Pulp3::Repository::MultiCopyUnits, extended_repo_mapping, unit_map,
96
+ dependency_solving: dep_solve).output
97
+ repos_to_clone.each do |source_repos|
98
+ if separated_repo_map[:pulp3_yum_multicopy].keys.include?(source_repos)
99
+ copy_repos(repository_mapping[source_repos])
100
+ end
92
101
  end
93
102
  end
94
103
  end
95
104
  end
96
- end
97
105
 
98
- if separated_repo_map[:other].keys.flatten.present?
99
- repos_to_clone.each do |source_repos|
100
- if separated_repo_map[:other].keys.include?(source_repos)
101
- copy_repos(repository_mapping[source_repos])
106
+ if separated_repo_map[:other].keys.flatten.present?
107
+ repos_to_clone.each do |source_repos|
108
+ if separated_repo_map[:other].keys.include?(source_repos)
109
+ copy_repos(repository_mapping[source_repos])
110
+ end
102
111
  end
103
112
  end
104
113
  end
105
- end
106
114
 
107
- plan_self(:content_view_id => old_version.content_view.id,
108
- :new_content_view_version_id => self.new_content_view_version.id,
109
- :environment_ids => environments.map(&:id), :user_id => ::User.current.id,
110
- :history_id => history.id, :copy_action_outputs => copy_action_outputs,
111
- :old_version => old_version.id)
112
- promote(new_content_view_version, environments)
115
+ plan_self(:content_view_id => old_version.content_view.id,
116
+ :new_content_view_version_id => self.new_content_view_version.id,
117
+ :environment_ids => environments.map(&:id), :user_id => ::User.current.id,
118
+ :history_id => history.id, :copy_action_outputs => copy_action_outputs,
119
+ :old_version => old_version.id)
120
+ promote(new_content_view_version, environments)
121
+ end
113
122
  end
114
123
  end
115
124
 
@@ -203,7 +212,7 @@ module Actions
203
212
  end
204
213
  end
205
214
 
206
- def run # rubocop:disable Metrics/CyclomaticComplexity
215
+ def run
207
216
  content = { ::Katello::Erratum::CONTENT_TYPE => [],
208
217
  ::Katello::Rpm::CONTENT_TYPE => [],
209
218
  ::Katello::ModuleStream::CONTENT_TYPE => [],
@@ -213,44 +222,23 @@ module Actions
213
222
  base_repos = ::Katello::ContentViewVersion.find(input[:old_version]).repositories
214
223
  new_repos = ::Katello::ContentViewVersion.find(input[:new_content_view_version_id]).repositories
215
224
 
216
- if input[:copy_action_outputs].present? && input[:copy_action_outputs].last[:pulp_tasks].present?
217
- if input[:copy_action_outputs].last[:pulp_tasks].last[:pulp_href]&.include?("/pulp/api/v3/")
218
- new_repos.each do |new_repo|
219
- matched_old_repo = base_repos.where(root_id: new_repo.root_id).first
225
+ if input[:is_composite] || input[:copy_action_outputs].present? && input[:copy_action_outputs].last[:pulp_tasks].present?
226
+ new_repos.each do |new_repo|
227
+ matched_old_repo = base_repos.where(root_id: new_repo.root_id).first
220
228
 
221
- new_errata = new_repo.errata - matched_old_repo.errata
222
- new_module_streams = new_repo.module_streams - matched_old_repo.module_streams
223
- new_rpms = new_repo.rpms - matched_old_repo.rpms
229
+ new_errata = new_repo.errata - (matched_old_repo&.errata || [])
230
+ new_module_streams = new_repo.module_streams - (matched_old_repo&.module_streams || [])
231
+ new_rpms = new_repo.rpms - (matched_old_repo&.rpms || [])
224
232
 
225
- new_errata.each do |erratum|
226
- content[::Katello::Erratum::CONTENT_TYPE] << erratum.errata_id
227
- end
228
- new_module_streams.each do |module_stream|
229
- content[::Katello::ModuleStream::CONTENT_TYPE] <<
230
- "#{module_stream.name}:#{module_stream.stream}:#{module_stream.version}"
231
- end
232
- new_rpms.each do |rpm|
233
- content[::Katello::Rpm::CONTENT_TYPE] << rpm.nvra
234
- end
233
+ new_errata.each do |erratum|
234
+ content[::Katello::Erratum::CONTENT_TYPE] << erratum.errata_id
235
235
  end
236
- else
237
- input[:copy_action_outputs].each do |copy_output|
238
- copy_output[:pulp_tasks].each do |pulp_task|
239
- pulp_task[:result][:units_successful].each do |unit|
240
- type = unit['type_id']
241
- unit = unit['unit_key']
242
- case type
243
- when ::Katello::Erratum::CONTENT_TYPE
244
- content[::Katello::Erratum::CONTENT_TYPE] << unit['id']
245
- when ::Katello::ModuleStream::CONTENT_TYPE
246
- content[::Katello::ModuleStream::CONTENT_TYPE] << "#{unit['name']}:#{unit['stream']}:#{unit['version']}"
247
- when ::Katello::Rpm::CONTENT_TYPE
248
- content[::Katello::Rpm::CONTENT_TYPE] << ::Katello::Util::Package.build_nvra(unit)
249
- when ::Katello::Deb::CONTENT_TYPE
250
- content[::Katello::Deb::CONTENT_TYPE] << "#{unit['name']}_#{unit['version']}_#{unit['architecture']}"
251
- end
252
- end
253
- end
236
+ new_module_streams.each do |module_stream|
237
+ content[::Katello::ModuleStream::CONTENT_TYPE] <<
238
+ "#{module_stream.name}:#{module_stream.stream}:#{module_stream.version}"
239
+ end
240
+ new_rpms.each do |rpm|
241
+ content[::Katello::Rpm::CONTENT_TYPE] << rpm.nvra
254
242
  end
255
243
  end
256
244
  end
@@ -274,6 +262,10 @@ module Actions
274
262
  repo.pulp_id)
275
263
  end
276
264
  end
265
+
266
+ if version.latest? && !version.content_view.composite?
267
+ version.auto_publish_composites!
268
+ end
277
269
  end
278
270
 
279
271
  # given a composite version, and a list of new components, calculate the list of all components for the new version
@@ -2,8 +2,8 @@ module Actions
2
2
  module Katello
3
3
  module ContentViewVersion
4
4
  class ResetContentViewRepositoriesFromMetadata < Actions::Base
5
- def plan(content_view:, metadata:)
6
- ::Katello::Pulp3::ContentViewVersion::Import.reset_content_view_repositories_from_metadata!(content_view: content_view, metadata: metadata)
5
+ def plan(import:)
6
+ import.reset_content_view_repositories!
7
7
  end
8
8
  end
9
9
  end