katello 4.3.0 → 4.4.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 (337) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  3. data/app/controllers/katello/api/v2/api_controller.rb +13 -4
  4. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +3 -0
  5. data/app/controllers/katello/api/v2/content_views_controller.rb +46 -0
  6. data/app/controllers/katello/api/v2/host_packages_controller.rb +21 -1
  7. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +30 -1
  8. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -6
  9. data/app/controllers/katello/api/v2/packages_controller.rb +4 -0
  10. data/app/controllers/katello/api/v2/repositories_controller.rb +17 -7
  11. data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
  12. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
  13. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
  14. data/app/controllers/katello/remote_execution_controller.rb +5 -4
  15. data/app/helpers/katello/content_source_helper.rb +43 -0
  16. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
  17. data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
  18. data/app/lib/actions/katello/content_view/publish.rb +5 -0
  19. data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
  20. data/app/lib/actions/katello/repository/discover.rb +1 -14
  21. data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
  22. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
  23. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
  24. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  25. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
  26. data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
  27. data/app/lib/katello/errors.rb +3 -3
  28. data/app/lib/katello/logging.rb +6 -1
  29. data/app/lib/katello/repo_discovery.rb +27 -19
  30. data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
  31. data/app/lib/katello/resources/cdn.rb +4 -2
  32. data/app/lib/katello/util/deduplication_migrator.rb +105 -0
  33. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  34. data/app/models/katello/cdn_configuration.rb +38 -6
  35. data/app/models/katello/concerns/host_managed_extensions.rb +23 -1
  36. data/app/models/katello/concerns/organization_extensions.rb +5 -1
  37. data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
  38. data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
  39. data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
  40. data/app/models/katello/content_view.rb +4 -4
  41. data/app/models/katello/content_view_filter.rb +1 -1
  42. data/app/models/katello/content_view_history.rb +1 -1
  43. data/app/models/katello/content_view_version.rb +6 -2
  44. data/app/models/katello/content_view_version_export_history.rb +1 -1
  45. data/app/models/katello/deb.rb +1 -3
  46. data/app/models/katello/docker_meta_tag.rb +1 -1
  47. data/app/models/katello/erratum.rb +0 -15
  48. data/app/models/katello/glue/pulp/repos.rb +1 -1
  49. data/app/models/katello/host/content_facet.rb +2 -27
  50. data/app/models/katello/host/info_provider.rb +9 -0
  51. data/app/models/katello/host/subscription_facet.rb +2 -2
  52. data/app/models/katello/hostgroup/content_facet.rb +2 -2
  53. data/app/models/katello/product.rb +1 -1
  54. data/app/models/katello/product_content.rb +2 -2
  55. data/app/models/katello/repository.rb +10 -9
  56. data/app/models/katello/root_repository.rb +24 -13
  57. data/app/models/katello/rpm.rb +8 -2
  58. data/app/models/setting/content.rb +6 -3
  59. data/app/services/cert/rhsm_client.rb +1 -5
  60. data/app/services/katello/content_unit_indexer.rb +166 -0
  61. data/app/services/katello/organization_creator.rb +12 -4
  62. data/app/services/katello/pulp/repository/docker.rb +1 -1
  63. data/app/services/katello/pulp/repository/yum.rb +0 -54
  64. data/app/services/katello/pulp/repository.rb +0 -6
  65. data/app/services/katello/pulp3/ansible_collection.rb +26 -10
  66. data/app/services/katello/pulp3/api/apt.rb +7 -0
  67. data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
  68. data/app/services/katello/pulp3/deb.rb +10 -9
  69. data/app/services/katello/pulp3/docker_manifest.rb +6 -5
  70. data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
  71. data/app/services/katello/pulp3/docker_tag.rb +16 -7
  72. data/app/services/katello/pulp3/erratum.rb +51 -56
  73. data/app/services/katello/pulp3/file_unit.rb +9 -6
  74. data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
  75. data/app/services/katello/pulp3/module_stream.rb +76 -30
  76. data/app/services/katello/pulp3/package_group.rb +5 -5
  77. data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
  78. data/app/services/katello/pulp3/repository/apt.rb +5 -3
  79. data/app/services/katello/pulp3/repository/docker.rb +14 -7
  80. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  81. data/app/services/katello/pulp3/repository/yum.rb +10 -12
  82. data/app/services/katello/pulp3/repository.rb +26 -7
  83. data/app/services/katello/pulp3/repository_mirror.rb +18 -5
  84. data/app/services/katello/pulp3/rpm.rb +13 -13
  85. data/app/services/katello/pulp3/srpm.rb +10 -9
  86. data/app/services/katello/repository_type.rb +15 -4
  87. data/app/services/katello/repository_type_manager.rb +1 -1
  88. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  89. data/app/services/katello/upstream_connection_checker.rb +2 -2
  90. data/app/views/foreman/job_templates/change_content_source.erb +1 -31
  91. data/app/views/foreman/job_templates/install_errata.erb +6 -9
  92. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
  93. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
  94. data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
  95. data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
  96. data/app/views/katello/api/v2/repositories/show.json.rabl +2 -0
  97. data/app/views/katello/layouts/react.html.erb +0 -1
  98. data/app/views/katello/sync_management/_repo.html.erb +36 -25
  99. data/config/initializers/monkeys.rb +0 -1
  100. data/config/routes/api/v2.rb +1 -0
  101. data/config/routes/overrides.rb +3 -0
  102. data/config/routes.rb +2 -0
  103. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  104. data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
  105. data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
  106. data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
  107. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
  108. data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
  109. data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
  110. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
  111. data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
  112. data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
  113. data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
  114. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  115. data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
  116. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +20 -8
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +34 -30
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +16 -2
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +35 -15
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
  132. data/lib/katello/engine.rb +4 -0
  133. data/lib/katello/permission_creator.rb +1 -1
  134. data/lib/katello/permissions/host_permissions.rb +3 -1
  135. data/lib/katello/plugin.rb +4 -1
  136. data/lib/katello/repository_types/deb.rb +0 -1
  137. data/lib/katello/repository_types/docker.rb +4 -4
  138. data/lib/katello/repository_types/file.rb +0 -1
  139. data/lib/katello/repository_types/ostree.rb +4 -0
  140. data/lib/katello/repository_types/python.rb +5 -1
  141. data/lib/katello/repository_types/yum.rb +2 -9
  142. data/lib/katello/tasks/content_view_import_only.rake +34 -0
  143. data/lib/katello/tasks/import_applicability.rake +1 -1
  144. data/lib/katello/tasks/jenkins.rake +0 -2
  145. data/lib/katello/tasks/repository.rake +4 -1
  146. data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
  147. data/lib/katello/version.rb +1 -1
  148. data/locale/action_names.rb +8 -7
  149. data/locale/bn/katello.po +1402 -650
  150. data/locale/cs/katello.po +1217 -96
  151. data/locale/de/katello.po +2359 -1347
  152. data/locale/en/katello.po +1216 -94
  153. data/locale/es/katello.po +2201 -1172
  154. data/locale/fr/katello.po +2601 -1615
  155. data/locale/gu/katello.po +1564 -814
  156. data/locale/hi/katello.po +1563 -810
  157. data/locale/it/katello.po +1311 -282
  158. data/locale/ja/katello.po +2534 -1518
  159. data/locale/katello.pot +3430 -1326
  160. data/locale/kn/katello.po +1564 -812
  161. data/locale/ko/katello.po +1441 -409
  162. data/locale/mr/katello.po +1564 -776
  163. data/locale/or/katello.po +1565 -813
  164. data/locale/pa/katello.po +1559 -792
  165. data/locale/pt/katello.po +1314 -277
  166. data/locale/pt_BR/katello.po +2226 -1181
  167. data/locale/ru/katello.po +1587 -563
  168. data/locale/ta/katello.po +1373 -619
  169. data/locale/te/katello.po +1564 -810
  170. data/locale/zh_CN/katello.po +2936 -1890
  171. data/locale/zh_TW/katello.po +1508 -606
  172. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
  173. data/webpack/components/ActionableDetail.js +35 -21
  174. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
  175. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
  176. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
  177. data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
  178. data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
  179. data/webpack/components/EditableSwitch.js +8 -2
  180. data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
  181. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
  182. data/webpack/components/Errata/index.js +19 -11
  183. data/webpack/components/Packages/index.js +1 -1
  184. data/webpack/components/Search/Search.js +5 -2
  185. data/webpack/components/Search/__tests__/search.test.js +2 -3
  186. data/webpack/components/SelectOrg/SetOrganization.js +1 -1
  187. data/webpack/components/Table/PageControls.js +3 -6
  188. data/webpack/components/Table/TableHooks.js +46 -7
  189. data/webpack/components/Table/TableWrapper.js +14 -3
  190. data/webpack/components/TypeAhead/TypeAhead.js +5 -1
  191. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
  192. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
  193. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
  194. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +3 -4
  195. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
  196. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +18 -2
  197. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +12 -0
  198. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +1 -1
  199. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +30 -21
  200. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.scss → ErrataTab/ErrataTab.scss} +0 -0
  201. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +0 -0
  202. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
  203. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
  204. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
  205. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
  206. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
  207. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
  208. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +125 -8
  209. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +27 -4
  210. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +2 -1
  211. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +6 -3
  212. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
  213. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
  214. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
  215. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
  216. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
  217. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +8 -5
  218. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.scss → TracesTab/TracesTab.scss} +0 -0
  219. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
  220. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
  221. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
  222. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +58 -7
  223. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
  224. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +4 -4
  225. data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
  226. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +12 -5
  227. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
  228. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
  229. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
  230. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
  231. data/webpack/components/pf3Table/components/Table.js +2 -3
  232. data/webpack/components/pf3Table/components/Table.test.js +0 -3
  233. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
  234. data/webpack/containers/Application/config.js +5 -0
  235. data/webpack/global_index.js +1 -1
  236. data/webpack/global_test_setup.js +1 -1
  237. data/webpack/index.js +7 -0
  238. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
  239. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
  240. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
  241. data/webpack/scenes/Content/ContentConfig.js +55 -5
  242. data/webpack/scenes/Content/ContentPage.js +1 -1
  243. data/webpack/scenes/Content/Details/ContentDetails.js +1 -1
  244. data/webpack/scenes/Content/Details/ContentInfo.js +1 -1
  245. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  246. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
  247. data/webpack/scenes/Content/Table/ContentTable.js +1 -1
  248. data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
  249. data/webpack/scenes/ContentViews/ContentViewsConstants.js +2 -1
  250. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
  251. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
  252. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +21 -27
  253. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
  254. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +8 -3
  255. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +11 -16
  256. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
  257. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +14 -8
  258. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
  259. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
  260. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
  261. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
  262. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
  263. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
  264. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
  265. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  266. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  267. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +23 -2
  268. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
  269. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +16 -17
  270. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  271. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
  272. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +30 -34
  273. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
  274. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +13 -15
  275. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +1 -1
  276. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +4 -4
  277. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
  278. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
  279. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +2 -2
  280. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
  281. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
  282. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
  283. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
  284. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
  285. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
  286. data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
  287. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
  288. data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
  289. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
  290. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
  291. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
  292. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
  293. data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
  294. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
  295. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
  296. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
  297. data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
  298. data/webpack/scenes/RedHatRepositories/index.js +11 -3
  299. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
  300. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
  301. data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
  302. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
  303. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
  304. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
  305. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
  306. data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
  307. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
  308. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +6 -1
  309. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
  310. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
  311. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
  312. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
  313. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
  314. data/webpack/scenes/Tasks/TaskActions.js +1 -1
  315. data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
  316. data/webpack/services/api/testHelpers.js +5 -3
  317. data/webpack/utils/helpers.js +6 -3
  318. metadata +81 -58
  319. data/app/services/katello/pulp/deb.rb +0 -55
  320. data/app/services/katello/pulp/distribution.rb +0 -7
  321. data/app/services/katello/pulp/docker_blob.rb +0 -7
  322. data/app/services/katello/pulp/docker_manifest.rb +0 -13
  323. data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
  324. data/app/services/katello/pulp/docker_tag.rb +0 -14
  325. data/app/services/katello/pulp/erratum.rb +0 -129
  326. data/app/services/katello/pulp/file_unit.rb +0 -21
  327. data/app/services/katello/pulp/module_stream.rb +0 -39
  328. data/app/services/katello/pulp/package_category.rb +0 -7
  329. data/app/services/katello/pulp/package_group.rb +0 -20
  330. data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
  331. data/app/services/katello/pulp/rpm.rb +0 -57
  332. data/app/services/katello/pulp/srpm.rb +0 -29
  333. data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
  334. data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
  335. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
  336. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
  337. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -79,7 +79,11 @@ module Katello
79
79
  end
80
80
 
81
81
  def publication_href
82
- api.publications_api.list(:repository_version => version_href).results.first&.pulp_href
82
+ if repo_service.repo.content_type == "deb"
83
+ api.publications_verbatim_api.list(:repository_version => version_href).results.first&.pulp_href
84
+ else
85
+ api.publications_api.list(:repository_version => version_href).results.first&.pulp_href
86
+ end
83
87
  end
84
88
 
85
89
  def create_version(options = {})
@@ -127,8 +131,12 @@ module Katello
127
131
  def sync(options = {})
128
132
  sync_params = repo_service.sync_url_params(options)
129
133
  sync_params[:remote] = remote_href
130
- sync_params[:mirror] = true
131
- sync_params.delete(:sync_policy)
134
+ if repo.yum?
135
+ sync_params[:sync_policy] = 'mirror_complete'
136
+ else
137
+ sync_params.delete(:sync_policy)
138
+ sync_params[:mirror] = true
139
+ end
132
140
  repository_sync_url_data = api.repository_sync_url_class.new(sync_params)
133
141
  [api.repositories_api.sync(repository_href, repository_sync_url_data)]
134
142
  end
@@ -167,8 +175,13 @@ module Katello
167
175
 
168
176
  def create_publication
169
177
  if (href = version_href)
170
- publication_data = api.publication_class.new(publication_options(href))
171
- api.publications_api.create(publication_data)
178
+ if repo_service.repo.content_type == "deb"
179
+ publication_data = api.publication_verbatim_class.new({repository_version: href})
180
+ api.publications_verbatim_api.create(publication_data)
181
+ else
182
+ publication_data = api.publication_class.new(publication_options(href))
183
+ api.publications_api.create(publication_data)
184
+ end
172
185
  end
173
186
  end
174
187
 
@@ -81,24 +81,24 @@ module Katello
81
81
  backend_data['rpm_license']
82
82
  end
83
83
 
84
- def parse_filename(path)
84
+ def self.parse_filename(path)
85
85
  File.split(path).last unless path.blank?
86
86
  end
87
87
 
88
- def update_model(model)
88
+ def self.generate_model_row(unit)
89
89
  custom_json = {}
90
- custom_json['modular'] = backend_data['is_modular']
91
- custom_json['pulp_id'] = backend_data['pulp_href']
90
+ custom_json['modular'] = unit['is_modular']
91
+ custom_json['pulp_id'] = unit['pulp_href']
92
92
  (PULP_INDEXED_FIELDS - ['is_modular', 'pulp_href', 'rpm_sourcerpm', 'pkgId', 'location_href']).
93
- each { |field| custom_json[field] = backend_data[field] }
94
- custom_json['release_sortable'] = Util::Package.sortable_version(backend_data['release'])
95
- custom_json['version_sortable'] = Util::Package.sortable_version(backend_data['version'])
96
- custom_json['filename'] = parse_filename(backend_data['location_href']) #location_href is the relative path of the rpm in the upstream repo
97
- custom_json['checksum'] = backend_data['pkgId']
98
- custom_json['sourcerpm'] = backend_data['rpm_sourcerpm']
99
- model.assign_attributes(custom_json)
100
- model.nvra = model.build_nvra
101
- model.save!
93
+ each { |field| custom_json[field] = unit[field] }
94
+ custom_json['release_sortable'] = Util::Package.sortable_version(unit['release'])
95
+ custom_json['version_sortable'] = Util::Package.sortable_version(unit['version'])
96
+ custom_json['filename'] = parse_filename(unit['location_href']) #location_href is the relative path of the rpm in the upstream repo
97
+ custom_json['checksum'] = unit['pkgId']
98
+ custom_json['sourcerpm'] = unit['rpm_sourcerpm']
99
+ custom_json['nvra'] = Util::Package.build_nvra(custom_json.with_indifferent_access)
100
+ custom_json['summary'] = custom_json['summary']&.truncate(255)
101
+ custom_json
102
102
  end
103
103
  end
104
104
  end
@@ -64,17 +64,18 @@ module Katello
64
64
  backend_data['rpm_license']
65
65
  end
66
66
 
67
- def update_model(model)
67
+ def self.generate_model_row(unit)
68
68
  custom_json = {}
69
- custom_json['pulp_id'] = backend_data['pulp_href']
69
+ custom_json['pulp_id'] = unit['pulp_href']
70
70
  (PULP_INDEXED_FIELDS - ['pulp_href', 'pkgId', 'location_href']).
71
- each { |field| custom_json[field] = backend_data[field] }
72
- custom_json['release_sortable'] = Util::Package.sortable_version(backend_data['release'])
73
- custom_json['version_sortable'] = Util::Package.sortable_version(backend_data['version'])
74
- custom_json['nvra'] = model.build_nvra
75
- custom_json['filename'] = backend_data['location_href']
76
- custom_json['checksum'] = backend_data['pkgId']
77
- model.update!(custom_json)
71
+ each { |field| custom_json[field] = unit[field] }
72
+ custom_json['release_sortable'] = Util::Package.sortable_version(unit['release'])
73
+ custom_json['version_sortable'] = Util::Package.sortable_version(unit['version'])
74
+ custom_json['nvra'] = Katello::Util::Package.build_nvra(custom_json)
75
+ custom_json['filename'] = unit['location_href']
76
+ custom_json['checksum'] = unit['pkgId']
77
+ custom_json['summary'] = custom_json['summary']&.truncate(255)
78
+ custom_json
78
79
  end
79
80
  end
80
81
  end
@@ -16,7 +16,8 @@ module Katello
16
16
  :pulp3_skip_publication, :configuration_class, :pulp3_api_class,
17
17
  :repositories_api_class, :api_class, :remotes_api_class, :repository_versions_api_class,
18
18
  :distributions_api_class, :remote_class, :repo_sync_url_class, :client_module_class,
19
- :distribution_class, :publication_class, :publications_api_class, :url_description
19
+ :distribution_class, :publication_class, :publications_api_class, :url_description,
20
+ :test_url, :test_url_root_options
20
21
 
21
22
  attr_accessor :metadata_publish_matching_check, :index_additional_data_proc
22
23
  attr_reader :id, :unique_content_per_repo
@@ -144,14 +145,14 @@ module Katello
144
145
  end
145
146
 
146
147
  class ContentType
147
- attr_accessor :model_class, :priority, :pulp2_service_class, :pulp3_service_class, :index, :uploadable, :removable,
148
- :primary_content, :index_on_pulp3, :generic_browser, :content_type, :repository_import_on_upload
148
+ attr_accessor :model_class, :priority, :pulp3_service_class, :index, :uploadable, :removable, :mutable,
149
+ :primary_content, :index_on_pulp3, :generic_browser, :content_type, :repository_import_on_upload,
150
+ :test_upload_path
149
151
 
150
152
  def initialize(options)
151
153
  self.model_class = options[:model_class]
152
154
  self.content_type = options[:content_type]
153
155
  self.priority = options[:priority] || 99
154
- self.pulp2_service_class = options[:pulp2_service_class]
155
156
  self.pulp3_service_class = options[:pulp3_service_class]
156
157
  self.index = options[:index].nil? ? true : options[:index]
157
158
  self.index_on_pulp3 = options[:index_on_pulp3].nil? ? true : options[:index_on_pulp3]
@@ -160,6 +161,8 @@ module Katello
160
161
  self.primary_content = options[:primary_content] || false
161
162
  self.generic_browser = options[:generic_browser]
162
163
  self.repository_import_on_upload = options[:repository_import_on_upload]
164
+ self.test_upload_path = options[:test_upload_path]
165
+ self.mutable = options.fetch(:mutable, false)
163
166
  end
164
167
 
165
168
  def label
@@ -174,6 +177,10 @@ module Katello
174
177
  removable: removable
175
178
  }
176
179
  end
180
+
181
+ def generic?
182
+ false
183
+ end
177
184
  end
178
185
 
179
186
  class GenericContentType < ContentType
@@ -198,6 +205,10 @@ module Katello
198
205
  self.content_type
199
206
  end
200
207
 
208
+ def generic?
209
+ true
210
+ end
211
+
201
212
  def details_columns
202
213
  columns = []
203
214
  columns << "Name" if self.model_name
@@ -151,7 +151,7 @@ module Katello
151
151
  def model_class(pulp_service_class)
152
152
  enabled_repository_types.values.each do |repo_type|
153
153
  repo_type.content_types.each do |content_type|
154
- return content_type.model_class if (content_type.pulp2_service_class == pulp_service_class || content_type.pulp3_service_class == pulp_service_class)
154
+ return content_type.model_class if (content_type.pulp3_service_class == pulp_service_class)
155
155
  end
156
156
  end
157
157
  end
@@ -7,7 +7,7 @@ module Katello
7
7
  CDN_PATH = '/content/dist/rhel/server/7/listing'.freeze
8
8
 
9
9
  def self.deliver!(orgs = ::Organization.all)
10
- return if Setting[:content_disconnected]
10
+ return unless Setting[:subscription_connection_enabled]
11
11
 
12
12
  orgs.each do |org|
13
13
  if cdn_inaccessible?(org) || upstream_inaccessible?(org)
@@ -1,7 +1,7 @@
1
1
  module Katello
2
2
  class UpstreamConnectionChecker
3
3
  POSSIBLE_EXCEPTIONS = [
4
- Katello::Errors::DisconnectedMode,
4
+ Katello::Errors::SubscriptionConnectionNotEnabled,
5
5
  Katello::Errors::ManifestExpired,
6
6
  Katello::Errors::UpstreamConsumerGone,
7
7
  Katello::Errors::UpstreamConsumerNotFound,
@@ -33,7 +33,7 @@ module Katello
33
33
  private
34
34
 
35
35
  def assert_connected
36
- fail Katello::Errors::DisconnectedMode if Setting[:content_disconnected]
36
+ fail Katello::Errors::SubscriptionConnectionNotEnabled unless Setting[:subscription_connection_enabled]
37
37
  end
38
38
 
39
39
  def assert_can_upstream_ping
@@ -8,35 +8,5 @@ description_format: Configure subscription manager to new content source
8
8
  feature: katello_change_content_source
9
9
  %>
10
10
  #!/bin/sh
11
- <%
12
- content_source = @host.content_source
13
- -%>
14
11
 
15
- <% if content_source -%>
16
- SSL_CA_CERT=$(mktemp)
17
- cat << EOF > $SSL_CA_CERT
18
- <%= foreman_server_ca_cert %>
19
- EOF
20
-
21
- KATELLO_SERVER_CA_CERT=/etc/rhsm/ca/katello-server-ca.pem
22
- RHSM_CFG=/etc/rhsm/rhsm.conf
23
-
24
- # Prepare SSL certificate
25
- mkdir -p /etc/rhsm/ca
26
- cp -f $SSL_CA_CERT $KATELLO_SERVER_CA_CERT
27
- chmod 644 $KATELLO_SERVER_CA_CERT
28
-
29
- # Configure subscription-manager
30
- test -f $RHSM_CFG.bak || cp $RHSM_CFG $RHSM_CFG.bak
31
-
32
- subscription-manager config \
33
- --server.hostname="<%= content_source.rhsm_url.host %>" \
34
- --server.port="<%= content_source.rhsm_url.port %>" \
35
- --server.prefix="<%= content_source.rhsm_url.path %>" \
36
- --rhsm.repo_ca_cert="$KATELLO_SERVER_CA_CERT" \
37
- --rhsm.baseurl="<%= content_source.pulp_content_url %>"
38
-
39
- <% else -%>
40
- echo "Host [<%= @host.name %>] doesn't have assigned content source!"
41
- exit 1
42
- <% end -%>
12
+ <%= change_content_source(@host, foreman_server_ca_cert) %>
@@ -2,25 +2,22 @@
2
2
  kind: job_template
3
3
  name: Install Errata - Katello SSH Default
4
4
  job_category: Katello
5
- description_format: 'Install errata %{Errata search query}'
5
+ description_format: 'Install errata %{errata}'
6
6
  feature: katello_errata_install
7
7
  provider_type: SSH
8
8
  template_inputs:
9
- - name: Errata search query
10
- description: Filter criteria for errata to be installed.
9
+ - name: errata
10
+ description: A comma-separated list of errata to install
11
11
  input_type: user
12
- required: false
12
+ required: true
13
13
  foreign_input_sets:
14
14
  - template: Package Action - SSH Default
15
15
  exclude: action,package
16
16
  %>
17
-
18
17
  <% if @host.operatingsystem.family == 'Suse' -%>
19
18
  <% advisories = input(:errata).split(',').join(' ') %>
20
19
  <%= render_template('Package Action - SSH Default', :action => 'install -n -t patch', :package => advisories) %>
21
20
  <% else %>
22
- <% advisory_ids = @host.advisory_ids(search: input("Errata search query")) %>
23
-
24
- <% advisories = advisory_ids.map { |e| "--advisory=#{e}" }.join(' ') %>
21
+ <% advisories = input(:errata).split(',').map { |e| "--advisory=#{e}" }.join(' ') %>
25
22
  <%= render_template('Package Action - SSH Default', :action => 'update-minimal', :package => advisories) %>
26
- <% end %>
23
+ <% end %>
@@ -0,0 +1,26 @@
1
+ <%#
2
+ kind: job_template
3
+ name: Install errata by search query - Katello SSH Default
4
+ job_category: Katello
5
+ description_format: 'Install errata %{Errata search query}'
6
+ feature: katello_errata_install_by_search
7
+ provider_type: SSH
8
+ template_inputs:
9
+ - name: Errata search query
10
+ description: Filter criteria for errata to be installed.
11
+ input_type: user
12
+ required: false
13
+ foreign_input_sets:
14
+ - template: Package Action - SSH Default
15
+ exclude: action,package
16
+ %>
17
+
18
+ <% if @host.operatingsystem.family == 'Suse' -%>
19
+ <% advisories = @host.advisory_ids(search: input("Errata search query")).join(' ') %>
20
+ <%= render_template('Package Action - SSH Default', :action => 'install -n -t patch', :package => advisories) %>
21
+ <% else %>
22
+ <% advisory_ids = @host.advisory_ids(search: input("Errata search query")) %>
23
+
24
+ <% advisories = advisory_ids.map { |e| "--advisory=#{e}" }.join(' ') %>
25
+ <%= render_template('Package Action - SSH Default', :action => 'update-minimal', :package => advisories) %>
26
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <%#
2
+ kind: job_template
3
+ name: Install packages by search query - Katello SSH Default
4
+ job_category: Katello
5
+ description_format: 'Install package(s) %{Package search query}'
6
+ feature: katello_package_install_by_search
7
+ provider_type: SSH
8
+ template_inputs:
9
+ - name: Package search query
10
+ description: Filter criteria for packages to be installed. IMPORTANT- If left blank, the job will attempt to install all possible packages.
11
+ input_type: user
12
+ required: false
13
+ %>
14
+ <% package_names = @host.package_names_for_job_template(
15
+ action: 'install',
16
+ search: input('Package search query')
17
+ ) -%>
18
+
19
+ <%= render_template('Package Action - SSH Default', :action => 'install', :package => package_names.join(' ')) %>
@@ -1,4 +1,4 @@
1
- attributes :url, :username, :upstream_organization_label, :ssl_ca_credential_id
1
+ attributes :url, :username, :upstream_organization_label, :ssl_ca_credential_id, :upstream_content_view_label, :upstream_lifecycle_environment_label, :type
2
2
 
3
3
  node :password_exists do |config|
4
4
  config.password.present?
@@ -46,4 +46,13 @@ node :permissions do |env|
46
46
  }
47
47
  end
48
48
 
49
+ node :content_views do |env|
50
+ env.content_views.non_default.map do |cv|
51
+ {
52
+ :name => cv.name,
53
+ :id => cv.id
54
+ }
55
+ end
56
+ end
57
+
49
58
  extends 'katello/api/v2/common/timestamps'
@@ -8,6 +8,8 @@ glue(@resource.root) do
8
8
  attributes :content_type
9
9
  attributes :docker_upstream_name
10
10
  attributes :docker_tags_whitelist
11
+ attributes :include_tags
12
+ attributes :exclude_tags
11
13
  attributes :verify_ssl_on_sync
12
14
  attributes :unprotected, :full_path, :checksum_type
13
15
  attributes :container_repository_name
@@ -7,7 +7,6 @@
7
7
  <% end %>
8
8
 
9
9
  <% content_for(:content) do %>
10
- <%= notifications %>
11
10
  <div id="organization-id" data-id="<%= Organization.current.id if Organization.current %>" ></div>
12
11
  <div id="user-id" data-id="<%= User.current.id if User.current %>" ></div>
13
12
  <div id="reactRoot">
@@ -6,37 +6,48 @@
6
6
  </label>
7
7
  </td>
8
8
  <td class="start_time">
9
- <%= @repo_status[repo.id][:start_time] %>
9
+ <%= @repo_status[repo.id][:sync_id] ? @repo_status[repo.id][:start_time] : _('N/A') %>
10
10
  </td>
11
11
  <td class="duration">
12
- <%= @repo_status[repo.id][:duration] %>
12
+ <%= @repo_status[repo.id][:sync_id] ? @repo_status[repo.id][:duration] : _('N/A') %>
13
13
  </td>
14
14
  <td class="size" data-size="<%= @repo_status[repo.id][:size] %>">
15
- <%= @repo_status[repo.id][:display_size] %>
15
+ <%= @repo_status[repo.id][:sync_id] ? @repo_status[repo.id][:display_size] : _('N/A')%>
16
16
  </td>
17
- <td class="result">
18
- <span class="result-info">
19
- <a href="/foreman_tasks/tasks/<%= @repo_status[repo.id][:sync_id] %>">
20
- <%= @repo_status[repo.id][:state] %>
21
- </a>
22
- </span>
23
- <a class="info-tipsy clickable fa fa-warning <%= 'hidden' if @repo_status[repo.id][:raw_state] != 'error' %>"
24
- href="/foreman_tasks/tasks/<%= @repo_status[repo.id][:sync_id] %>">
25
- <span class="hidden-text hidden">
26
- <div class="la error-tipsy">
27
- <ul>
28
- <% if @repo_status[repo.id][:error_details].present? && error_state?(@repo_status[repo.id]) %>
29
- <% @repo_status[repo.id][:error_details][:messages].each do |error| %>
30
- <li>
31
- <%= error %>
32
- </li>
33
- <% end %>
34
- <% end %>
35
- </ul>
36
- </div>
17
+ <% if @repo_status[repo.id][:sync_id] %>
18
+ <td class="result">
19
+ <span class="result-info">
20
+ <a href="/foreman_tasks/tasks/<%= @repo_status[repo.id][:sync_id] %>">
21
+ <%= @repo_status[repo.id][:state] %>
22
+ </a>
37
23
  </span>
38
- </a>
39
- </td>
24
+ <a class="info-tipsy clickable fa fa-warning <%= 'hidden' if @repo_status[repo.id][:raw_state] != 'error' %>"
25
+ href="/foreman_tasks/tasks/<%= @repo_status[repo.id][:sync_id] %>">
26
+ <span class="hidden-text hidden">
27
+ <div class="la error-tipsy">
28
+ <ul>
29
+ <% if @repo_status[repo.id][:error_details].present? && error_state?(@repo_status[repo.id]) %>
30
+ <% @repo_status[repo.id][:error_details][:messages].each do |error| %>
31
+ <li>
32
+ <%= error %>
33
+ </li>
34
+ <% end %>
35
+ <% end %>
36
+ </ul>
37
+ </div>
38
+ </span>
39
+ </a>
40
+ </td>
41
+ <% elsif repo&.latest_sync_audit&.created_at %>
42
+ <td>
43
+ <%= _("Synced ") + time_ago_in_words(repo&.latest_sync_audit&.created_at) + _(" ago.") %>
44
+ </td>
45
+ <% else%>
46
+ <td>
47
+ <%= @repo_status[repo.id][:state] %>
48
+ </td>
49
+ <% end %>
50
+
40
51
  <% if @show_org %>
41
52
  <td></td>
42
53
  <% end %>
@@ -2,4 +2,3 @@
2
2
  require 'monkeys/anemone'
3
3
  require 'monkeys/ar_postgres_evr_t'
4
4
  require 'monkeys/fx_sqlite_skip'
5
- require 'monkeys/pulp3_13_checksumfix'
@@ -74,6 +74,7 @@ Katello::Engine.routes.draw do
74
74
  post :copy
75
75
  post :publish
76
76
  put :remove
77
+ put :bulk_delete_versions
77
78
  put :remove_filters
78
79
  match '/environments/:environment_id' => "content_views#remove_from_environment", :via => :delete
79
80
  end
@@ -32,6 +32,8 @@ Foreman::Application.routes.draw do
32
32
  end
33
33
  end
34
34
 
35
+ post '/change_host_content_source/data', to: 'hosts#change_content_source_data'
36
+
35
37
  namespace :api do
36
38
  scope "(:api_version)", :module => :v2, :defaults => {:api_version => 'v2'}, :api_version => /v2/, :constraints => ApiConstraints.new(:version => 2, :default => true) do
37
39
  match '/hosts/post_index' => 'hosts#index', :via => :post
@@ -80,6 +82,7 @@ Foreman::Application.routes.draw do
80
82
  match '/bulk/system_purpose' => 'hosts_bulk_actions#system_purpose', :via => :put
81
83
  match '/bulk/available_incremental_updates' => 'hosts_bulk_actions#available_incremental_updates', :via => :post
82
84
  match '/bulk/module_streams' => 'hosts_bulk_actions#module_streams', :via => :post
85
+ match '/bulk/change_content_source' => 'hosts_bulk_actions#change_content_source', :via => :put
83
86
  match '/subscriptions/' => 'host_subscriptions#create', :via => :post
84
87
  end
85
88
 
data/config/routes.rb CHANGED
@@ -42,4 +42,6 @@ Katello::Engine.routes.draw do
42
42
  match '/labs' => 'react#index', :via => [:get]
43
43
  match '/labs/*page' => 'react#index', :via => [:get]
44
44
  match '/organization_select' => 'react#index', :via => [:get]
45
+
46
+ get '/change_host_content_source', to: 'react#index'
45
47
  end
@@ -38,7 +38,7 @@ class MigrateContentHosts < ActiveRecord::Migration[4.2]
38
38
  self.table_name = "katello_content_views"
39
39
 
40
40
  has_many :systems, :class_name => "MigrateContentHosts::System", :dependent => :restrict_with_exception
41
- has_many :content_facets, :class_name => "MigrateContentHosts::ContentFacet", :foreign_key => :content_view_id,
41
+ has_many :content_facets, :class_name => "MigrateContentHosts::ContentFacet",
42
42
  :inverse_of => :content_view, :dependent => :restrict_with_exception
43
43
  end
44
44
 
@@ -7,8 +7,8 @@ class AddContentOrgId < ActiveRecord::Migration[5.1]
7
7
 
8
8
  class FakeProductContent < Katello::Model
9
9
  self.table_name = 'katello_product_contents'
10
- belongs_to :product, :class_name => 'Katello::Product', :foreign_key => 'product_id', :inverse_of => :product_contents
11
- belongs_to :content, :class_name => 'FakeContent', :foreign_key => 'content_id', :inverse_of => :product_contents
10
+ belongs_to :product, :class_name => 'Katello::Product', :inverse_of => :product_contents
11
+ belongs_to :content, :class_name => 'FakeContent', :inverse_of => :product_contents
12
12
  end
13
13
 
14
14
  class FakeProduct < Katello::Model
@@ -0,0 +1,20 @@
1
+ class AddUniqueIndexes < ActiveRecord::Migration[6.0]
2
+ def up
3
+ ::Katello::Util::DeduplicationMigrator.new.execute!
4
+ add_index :katello_capsule_lifecycle_environments, [:capsule_id, :lifecycle_environment_id], unique: true, name: 'katello_capsule_lifecycle_environments_unique_index'
5
+ add_index :katello_content_view_erratum_filter_rules, [:errata_id, :content_view_filter_id], unique: true, name: 'katello_content_view_erratum_filter_rules_unique_index'
6
+ add_index :katello_content_view_module_stream_filter_rules, [:module_stream_id, :content_view_filter_id], unique: true, name: 'katello_content_view_module_stream_filter_rules_unique_index'
7
+ add_index :katello_content_view_package_group_filter_rules, [:uuid, :content_view_filter_id], unique: true, name: 'katello_content_view_package_group_filter_rules_unique_index'
8
+ add_index :katello_content_view_repositories, [:content_view_id, :repository_id], unique: true, name: 'katello_content_view_repositories_unique_index'
9
+ add_index :katello_content_views, [:name, :organization_id], unique: true, name: 'katello_content_views_name_unique_index'
10
+ end
11
+
12
+ def down
13
+ remove_index :katello_capsule_lifecycle_environments, name: 'katello_capsule_lifecycle_environments_unique_index'
14
+ remove_index :katello_content_view_erratum_filter_rules, name: 'katello_content_view_erratum_filter_rules_unique_index'
15
+ remove_index :katello_content_view_module_stream_filter_rules, name: 'katello_content_view_module_stream_filter_rules_unique_index'
16
+ remove_index :katello_content_view_package_group_filter_rules, name: 'katello_content_view_package_group_filter_rules_unique_index'
17
+ remove_index :katello_content_view_repositories, name: 'katello_content_view_repositories_unique_index'
18
+ remove_index :katello_content_views, name: 'katello_content_views_name_unique_index'
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ class AddContentViewAndLifecycleEnvironment < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :katello_cdn_configurations, :upstream_content_view_label, :string
4
+ add_column :katello_cdn_configurations, :upstream_lifecycle_environment_label, :string
5
+ end
6
+ end