katello 4.13.1 → 4.14.0.rc1.1

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 (423) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +12 -8
  3. data/app/assets/javascripts/katello/locale/bn/katello.js +274 -22
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +274 -22
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +274 -22
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +274 -22
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +275 -23
  8. data/app/assets/javascripts/katello/locale/de/katello.js +280 -28
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +274 -22
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +274 -22
  11. data/app/assets/javascripts/katello/locale/el/katello.js +274 -22
  12. data/app/assets/javascripts/katello/locale/en/katello.js +274 -22
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +274 -22
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +274 -22
  15. data/app/assets/javascripts/katello/locale/es/katello.js +276 -24
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +274 -22
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +283 -31
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +274 -22
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +274 -22
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +274 -22
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +274 -22
  22. data/app/assets/javascripts/katello/locale/id/katello.js +274 -22
  23. data/app/assets/javascripts/katello/locale/it/katello.js +274 -22
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +283 -31
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +280 -28
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +274 -22
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +274 -22
  28. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +274 -22
  29. data/app/assets/javascripts/katello/locale/mr/katello.js +274 -22
  30. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +274 -22
  31. data/app/assets/javascripts/katello/locale/or/katello.js +274 -22
  32. data/app/assets/javascripts/katello/locale/pa/katello.js +274 -22
  33. data/app/assets/javascripts/katello/locale/pl/katello.js +274 -22
  34. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +274 -22
  35. data/app/assets/javascripts/katello/locale/pt/katello.js +274 -22
  36. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +276 -24
  37. data/app/assets/javascripts/katello/locale/ro/katello.js +274 -22
  38. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +274 -22
  39. data/app/assets/javascripts/katello/locale/ru/katello.js +274 -22
  40. data/app/assets/javascripts/katello/locale/sl/katello.js +274 -22
  41. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +274 -22
  42. data/app/assets/javascripts/katello/locale/ta/katello.js +274 -22
  43. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +274 -22
  44. data/app/assets/javascripts/katello/locale/te/katello.js +274 -22
  45. data/app/assets/javascripts/katello/locale/tr/katello.js +274 -22
  46. data/app/assets/javascripts/katello/locale/vi/katello.js +274 -22
  47. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +274 -22
  48. data/app/assets/javascripts/katello/locale/zh/katello.js +274 -22
  49. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +283 -31
  50. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +274 -22
  51. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +118 -74
  52. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +15 -10
  53. data/app/controllers/katello/api/v2/activation_keys_controller.rb +1 -1
  54. data/app/controllers/katello/api/v2/api_controller.rb +7 -0
  55. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +4 -4
  56. data/app/controllers/katello/api/v2/debs_controller.rb +3 -2
  57. data/app/controllers/katello/api/v2/environments_controller.rb +2 -4
  58. data/app/controllers/katello/api/v2/host_contents_controller.rb +8 -3
  59. data/app/controllers/katello/api/v2/host_errata_controller.rb +4 -4
  60. data/app/controllers/katello/api/v2/host_packages_controller.rb +2 -2
  61. data/app/controllers/katello/api/v2/organizations_controller.rb +1 -1
  62. data/app/controllers/katello/api/v2/packages_controller.rb +13 -3
  63. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +6 -2
  64. data/app/controllers/katello/api/v2/repositories_controller.rb +3 -4
  65. data/app/controllers/katello/api/v2/repository_sets_controller.rb +13 -14
  66. data/app/controllers/katello/api/v2/subscriptions_controller.rb +15 -9
  67. data/app/controllers/katello/api/v2/sync_controller.rb +2 -2
  68. data/app/controllers/katello/application_controller.rb +1 -1
  69. data/app/controllers/katello/concerns/api/v2/authorization.rb +3 -2
  70. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +28 -0
  71. data/app/controllers/katello/concerns/api/v2/registration_commands_controller_extensions.rb +1 -1
  72. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +4 -0
  73. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +4 -3
  74. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +2 -4
  75. data/app/controllers/katello/remote_execution_controller.rb +53 -58
  76. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +19 -2
  77. data/app/helpers/katello/katello_urls_helper.rb +1 -1
  78. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +1 -1
  79. data/app/lib/actions/katello/alternate_content_source/update.rb +2 -1
  80. data/app/lib/actions/katello/capsule_content/verify_checksum.rb +1 -2
  81. data/app/lib/actions/katello/content_view/publish.rb +1 -0
  82. data/app/lib/actions/katello/content_view_version/create_repos.rb +1 -0
  83. data/app/lib/actions/katello/content_view_version/incremental_update.rb +3 -2
  84. data/app/lib/actions/katello/environment/{publish_repositories.rb → publish_container_repositories.rb} +10 -8
  85. data/app/lib/actions/katello/foreman/content_update.rb +4 -6
  86. data/app/lib/actions/katello/host/hypervisors_update.rb +6 -4
  87. data/app/lib/actions/katello/repository/create.rb +4 -4
  88. data/app/lib/actions/katello/repository/import_upload.rb +4 -6
  89. data/app/lib/actions/katello/repository/metadata_generate.rb +1 -0
  90. data/app/lib/actions/katello/repository/update.rb +3 -3
  91. data/app/lib/actions/katello/repository_set/enable_repository.rb +5 -6
  92. data/app/lib/actions/middleware/backend_services_check.rb +3 -2
  93. data/app/lib/actions/pulp3/abstract_async_task.rb +2 -4
  94. data/app/lib/actions/pulp3/capsule_content/verify_checksum.rb +1 -2
  95. data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +5 -1
  96. data/app/lib/actions/pulp3/orchestration/repository/delete.rb +5 -2
  97. data/app/lib/actions/pulp3/repository/save_version.rb +3 -5
  98. data/app/lib/katello/concerns/base_template_scope_extensions.rb +5 -9
  99. data/app/lib/katello/errors.rb +1 -0
  100. data/app/lib/katello/http_resource.rb +1 -0
  101. data/app/lib/katello/lazy_accessor.rb +1 -1
  102. data/app/lib/katello/resources/candlepin/candlepin_ping.rb +0 -5
  103. data/app/lib/katello/resources/candlepin/owner.rb +1 -1
  104. data/app/lib/katello/resources/candlepin/pool.rb +1 -2
  105. data/app/lib/katello/resources/candlepin/upstream_job.rb +1 -1
  106. data/app/lib/katello/resources/cdn.rb +3 -2
  107. data/app/lib/katello/resources/discovery/yum.rb +3 -3
  108. data/app/lib/katello/util/cdn_var_substitutor.rb +5 -3
  109. data/app/lib/katello/util/data.rb +3 -2
  110. data/app/lib/katello/util/errata.rb +4 -3
  111. data/app/lib/katello/util/package.rb +3 -3
  112. data/app/lib/katello/util/path_with_substitutions.rb +1 -1
  113. data/app/lib/katello/util/report_table.rb +3 -2
  114. data/app/lib/katello/util/url_matcher.rb +1 -1
  115. data/app/lib/katello/validators/alternate_content_source_path_validator.rb +4 -3
  116. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +5 -7
  117. data/app/lib/katello/validators/container_image_name_validator.rb +1 -1
  118. data/app/lib/katello/validators/katello_name_format_validator.rb +2 -2
  119. data/app/lib/katello/validators/no_trailing_space_validator.rb +2 -2
  120. data/app/lib/katello/validators/prior_validator.rb +2 -2
  121. data/app/lib/katello/validators/product_unique_attribute_validator.rb +2 -4
  122. data/app/models/katello/activation_key.rb +4 -6
  123. data/app/models/katello/alternate_content_source.rb +1 -1
  124. data/app/models/katello/authorization/host_tracer.rb +1 -2
  125. data/app/models/katello/authorization/product.rb +1 -1
  126. data/app/models/katello/candlepin/repository_mapper.rb +2 -2
  127. data/app/models/katello/concerns/host_managed_extensions.rb +41 -10
  128. data/app/models/katello/concerns/hostgroup_extensions.rb +2 -4
  129. data/app/models/katello/concerns/location_extensions.rb +2 -4
  130. data/app/models/katello/concerns/operatingsystem_extensions.rb +84 -16
  131. data/app/models/katello/concerns/smart_proxy_extensions.rb +4 -4
  132. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +2 -0
  133. data/app/models/katello/content_view.rb +5 -1
  134. data/app/models/katello/content_view_environment.rb +19 -4
  135. data/app/models/katello/content_view_environment_content_facet.rb +11 -0
  136. data/app/models/katello/erratum.rb +1 -1
  137. data/app/models/katello/event.rb +1 -1
  138. data/app/models/katello/glue/provider.rb +1 -2
  139. data/app/models/katello/hash_util.rb +1 -1
  140. data/app/models/katello/host/content_facet.rb +16 -3
  141. data/app/models/katello/host/subscription_facet.rb +27 -4
  142. data/app/models/katello/host_collection.rb +12 -8
  143. data/app/models/katello/pool.rb +5 -1
  144. data/app/models/katello/product.rb +7 -4
  145. data/app/models/katello/provider.rb +1 -2
  146. data/app/models/katello/repository.rb +18 -4
  147. data/app/models/katello/root_repository.rb +19 -0
  148. data/app/models/katello/rpm.rb +2 -2
  149. data/app/models/katello/subscription_facet_pool.rb +1 -1
  150. data/app/models/katello/sync_plan.rb +5 -4
  151. data/app/models/katello/task_status.rb +18 -18
  152. data/app/presenters/katello/product_host_count_presenter.rb +10 -0
  153. data/app/services/katello/candlepin/consumer.rb +11 -11
  154. data/app/services/katello/candlepin/message_handler.rb +3 -2
  155. data/app/services/katello/content_unit_indexer.rb +6 -0
  156. data/app/services/katello/pulp3/alternate_content_source.rb +1 -3
  157. data/app/services/katello/pulp3/api/core.rb +1 -1
  158. data/app/services/katello/pulp3/api/docker.rb +10 -0
  159. data/app/services/katello/pulp3/content_view_version/export.rb +1 -0
  160. data/app/services/katello/pulp3/content_view_version/import.rb +6 -4
  161. data/app/services/katello/pulp3/content_view_version/importable_products.rb +1 -3
  162. data/app/services/katello/pulp3/repository/apt.rb +4 -16
  163. data/app/services/katello/pulp3/repository/yum.rb +9 -5
  164. data/app/services/katello/pulp3/repository.rb +2 -2
  165. data/app/services/katello/pulp3/repository_mirror.rb +2 -9
  166. data/app/services/katello/pulp3/task.rb +4 -2
  167. data/app/services/katello/registration_manager.rb +13 -3
  168. data/app/services/katello/smart_proxy_helper.rb +1 -0
  169. data/app/views/dashboard/_host_collection_widget.html.erb +5 -4
  170. data/app/views/foreman/job_templates/install_errata.erb +2 -0
  171. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +2 -0
  172. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +2 -0
  173. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +3 -1
  174. data/app/views/foreman/job_templates/install_packages_by_search_query_-_katello_ansible_default.erb +1 -1
  175. data/app/views/foreman/job_templates/remove_packages_by_search_query_-_katello_ansible_default.erb +2 -2
  176. data/app/views/foreman/job_templates/resolve_traces.erb +5 -1
  177. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +1 -1
  178. data/app/views/foreman/job_templates/upload_profile.erb +2 -0
  179. data/app/views/foreman/smart_proxies/_reclaim_space.html.erb +7 -5
  180. data/app/views/katello/api/v2/content_facet/base.json.rabl +18 -2
  181. data/app/views/katello/api/v2/packages/thindex.json.rabl +6 -0
  182. data/app/views/katello/api/v2/repositories/show.json.rabl +8 -8
  183. data/app/views/katello/api/v2/repository_sets/show.json.rabl +1 -1
  184. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  185. data/app/views/katello/api/v2/subscriptions/index.json.rabl +1 -0
  186. data/app/views/katello/api/v2/subscriptions/show.json.rabl +1 -0
  187. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +14 -11
  188. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +4 -4
  189. data/config/routes/api/v2.rb +3 -1
  190. data/config/routes.rb +1 -3
  191. data/db/migrate/20160114200145_add_mirror_on_sync_to_repositories.rb +1 -0
  192. data/db/migrate/20160131182301_add_download_policy_to_katello_repositories.rb +1 -0
  193. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +3 -0
  194. data/db/migrate/20240522165308_add_priority_to_content_view_environment_content_facet.rb +5 -0
  195. data/db/migrate/20240621121212_katello_repository_debs_id_bigint.rb +6 -0
  196. data/db/migrate/20240729192228_add_convert2rhel_to_host_facets.rb +9 -0
  197. data/db/seeds.d/102-organizations.rb +5 -7
  198. data/db/seeds.d/150-module_job_templates.rb +7 -9
  199. data/db/seeds.d/75-job_templates.rb +9 -16
  200. data/engines/bastion_katello/README.md +3 -0
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +3 -3
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +6 -6
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-content-hosts.html +2 -2
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -4
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +6 -6
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +28 -27
  207. data/engines/bastion_katello/lib/bastion_katello/engine.rb +2 -2
  208. data/lib/katello/engine.rb +1 -8
  209. data/lib/katello/permission_creator.rb +3 -2
  210. data/lib/katello/plugin.rb +31 -27
  211. data/lib/katello/tasks/clean_old_file_repos.rake +2 -4
  212. data/lib/katello/tasks/reset.rake +3 -4
  213. data/lib/katello/version.rb +1 -1
  214. data/lib/katello.rb +0 -2
  215. data/lib/monkeys/ar_postgres_evr_t.rb +2 -0
  216. data/locale/action_names.rb +1 -1
  217. data/locale/bn/katello.po +274 -22
  218. data/locale/bn_IN/katello.po +274 -22
  219. data/locale/ca/katello.po +274 -22
  220. data/locale/cs/katello.po +274 -22
  221. data/locale/cs_CZ/katello.po +275 -23
  222. data/locale/de/katello.po +280 -28
  223. data/locale/de_AT/katello.po +274 -22
  224. data/locale/de_DE/katello.po +274 -22
  225. data/locale/el/katello.po +274 -22
  226. data/locale/en/katello.po +274 -22
  227. data/locale/en_GB/katello.po +274 -22
  228. data/locale/en_US/katello.po +274 -22
  229. data/locale/es/katello.po +276 -24
  230. data/locale/et_EE/katello.po +274 -22
  231. data/locale/fr/katello.po +283 -31
  232. data/locale/gl/katello.po +274 -22
  233. data/locale/gu/katello.po +274 -22
  234. data/locale/he_IL/katello.po +274 -22
  235. data/locale/hi/katello.po +274 -22
  236. data/locale/id/katello.po +274 -22
  237. data/locale/it/katello.po +274 -22
  238. data/locale/ja/katello.po +283 -31
  239. data/locale/ka/katello.po +280 -28
  240. data/locale/katello.pot +1001 -527
  241. data/locale/kn/katello.po +274 -22
  242. data/locale/ko/katello.po +274 -22
  243. data/locale/ml_IN/katello.po +274 -22
  244. data/locale/mr/katello.po +274 -22
  245. data/locale/nl_NL/katello.po +274 -22
  246. data/locale/or/katello.po +274 -22
  247. data/locale/pa/katello.po +274 -22
  248. data/locale/pl/katello.po +274 -22
  249. data/locale/pl_PL/katello.po +274 -22
  250. data/locale/pt/katello.po +274 -22
  251. data/locale/pt_BR/katello.po +276 -24
  252. data/locale/ro/katello.po +274 -22
  253. data/locale/ro_RO/katello.po +274 -22
  254. data/locale/ru/katello.po +274 -22
  255. data/locale/sl/katello.po +274 -22
  256. data/locale/sv_SE/katello.po +274 -22
  257. data/locale/ta/katello.po +274 -22
  258. data/locale/ta_IN/katello.po +274 -22
  259. data/locale/te/katello.po +274 -22
  260. data/locale/tr/katello.po +274 -22
  261. data/locale/vi/katello.po +274 -22
  262. data/locale/vi_VN/katello.po +274 -22
  263. data/locale/zh/katello.po +274 -22
  264. data/locale/zh_CN/katello.po +283 -31
  265. data/locale/zh_TW/katello.po +274 -22
  266. data/webpack/ForemanColumnExtensions/index.js +44 -1
  267. data/webpack/components/Table/TableWrapper.js +6 -0
  268. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +24 -3
  269. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +124 -56
  270. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +2 -3
  271. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViewDetailsCard.test.js +44 -10
  272. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +83 -31
  273. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
  274. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionHooks.js +1 -1
  275. data/webpack/components/extensions/HostDetails/Tabs/__tests__/remoteExecutionActions.test.js +44 -0
  276. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +22 -7
  277. data/webpack/components/extensions/Hosts/ActionsBar/ActionsBar.scss +14 -0
  278. data/webpack/components/extensions/Hosts/ActionsBar/index.js +82 -23
  279. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCVModal/index.js +5 -2
  280. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/02_BulkErrataTable.js +171 -0
  281. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_Review.js +160 -0
  282. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +99 -0
  283. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +157 -0
  284. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/index.js +24 -0
  285. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/02_BulkPackagesTable.js +157 -0
  286. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_Review.js +168 -0
  287. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +141 -0
  288. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +252 -0
  289. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/index.js +24 -0
  290. data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +176 -0
  291. data/webpack/components/extensions/Hosts/TableRowActions/index.js +17 -0
  292. data/webpack/global_index.js +11 -3
  293. data/webpack/redux/actions/RedHatRepositories/repositorySetRepositories.js +5 -6
  294. data/webpack/redux/reducers/RedHatRepositories/__tests__/repositorySetRepositories.test.js +1 -1
  295. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +1 -1
  296. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +2 -1
  297. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +2 -1
  298. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +2 -1
  299. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -1
  300. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +2 -1
  301. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +2 -2
  302. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +2 -1
  303. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +3 -2
  304. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +2 -1
  305. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +2 -1
  306. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +2 -1
  307. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelectOption.js +2 -2
  308. data/webpack/scenes/Subscriptions/Details/SubscriptionAttributes.js +1 -0
  309. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailInfo.test.js.snap +10 -0
  310. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +6 -0
  311. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +2 -0
  312. data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +14 -0
  313. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableHelpers.js +1 -0
  314. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +10 -0
  315. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.fixtures.js +1 -0
  316. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +10 -0
  317. data/webpack/scenes/Tasks/helpers.js +1 -1
  318. metadata +25 -111
  319. data/app/assets/javascripts/katello/containers/container.js +0 -304
  320. data/app/lib/katello/util/http_helper.rb +0 -15
  321. data/app/models/732bd3db9f64c621c64d2be4f2a838727aac0845.patch +0 -61
  322. data/app/models/katello/repository.rb.bak +0 -978
  323. data/app/services/katello/pulp3/content_view_version/import_validator.rb.bak +0 -166
  324. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb.bak +0 -164
  325. data/lib/katello/tasks/update_repository_expiry.rake +0 -114
  326. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  327. data/locale/bn/katello.po.time_stamp +0 -0
  328. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  329. data/locale/bn_IN/katello.po.time_stamp +0 -0
  330. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  331. data/locale/ca/katello.po.time_stamp +0 -0
  332. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  333. data/locale/cs/katello.po.time_stamp +0 -0
  334. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  335. data/locale/cs_CZ/katello.po.time_stamp +0 -0
  336. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  337. data/locale/de/katello.po.time_stamp +0 -0
  338. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  339. data/locale/de_AT/katello.po.time_stamp +0 -0
  340. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  341. data/locale/de_DE/katello.po.time_stamp +0 -0
  342. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  343. data/locale/el/katello.po.time_stamp +0 -0
  344. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  345. data/locale/en/katello.po.time_stamp +0 -0
  346. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  347. data/locale/en_GB/katello.po.time_stamp +0 -0
  348. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  349. data/locale/en_US/katello.po.time_stamp +0 -0
  350. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  351. data/locale/es/katello.po.time_stamp +0 -0
  352. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  353. data/locale/et_EE/katello.po.time_stamp +0 -0
  354. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  355. data/locale/fr/katello.po.time_stamp +0 -0
  356. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  357. data/locale/gl/katello.po.time_stamp +0 -0
  358. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  359. data/locale/gu/katello.po.time_stamp +0 -0
  360. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  361. data/locale/he_IL/katello.po.time_stamp +0 -0
  362. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  363. data/locale/hi/katello.po.time_stamp +0 -0
  364. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  365. data/locale/id/katello.po.time_stamp +0 -0
  366. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  367. data/locale/it/katello.po.time_stamp +0 -0
  368. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  369. data/locale/ja/katello.po.time_stamp +0 -0
  370. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  371. data/locale/ka/katello.po.time_stamp +0 -0
  372. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  373. data/locale/kn/katello.po.time_stamp +0 -0
  374. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  375. data/locale/ko/katello.po.time_stamp +0 -0
  376. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  377. data/locale/ml_IN/katello.po.time_stamp +0 -0
  378. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  379. data/locale/mr/katello.po.time_stamp +0 -0
  380. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  381. data/locale/nl_NL/katello.po.time_stamp +0 -0
  382. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  383. data/locale/or/katello.po.time_stamp +0 -0
  384. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  385. data/locale/pa/katello.po.time_stamp +0 -0
  386. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  387. data/locale/pl/katello.po.time_stamp +0 -0
  388. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  389. data/locale/pl_PL/katello.po.time_stamp +0 -0
  390. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  391. data/locale/pt/katello.po.time_stamp +0 -0
  392. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  393. data/locale/pt_BR/katello.po.time_stamp +0 -0
  394. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  395. data/locale/ro/katello.po.time_stamp +0 -0
  396. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  397. data/locale/ro_RO/katello.po.time_stamp +0 -0
  398. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  399. data/locale/ru/katello.po.time_stamp +0 -0
  400. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  401. data/locale/sl/katello.po.time_stamp +0 -0
  402. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  403. data/locale/sv_SE/katello.po.time_stamp +0 -0
  404. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  405. data/locale/ta/katello.po.time_stamp +0 -0
  406. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  407. data/locale/ta_IN/katello.po.time_stamp +0 -0
  408. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  409. data/locale/te/katello.po.time_stamp +0 -0
  410. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  411. data/locale/tr/katello.po.time_stamp +0 -0
  412. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  413. data/locale/vi/katello.po.time_stamp +0 -0
  414. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  415. data/locale/vi_VN/katello.po.time_stamp +0 -0
  416. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  417. data/locale/zh/katello.po.time_stamp +0 -0
  418. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  419. data/locale/zh_CN/katello.po.time_stamp +0 -0
  420. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  421. data/locale/zh_TW/katello.po.time_stamp +0 -0
  422. data/webpack/global_test_setup.js.bak +0 -59
  423. data/webpack/utils/useKatelloDocUrl.js +0 -18
@@ -58,8 +58,8 @@ module Actions
58
58
 
59
59
  def run
60
60
  repository = ::Katello::Repository.find(input[:repository_id])
61
- if input[:sync_capsule]
62
- ForemanTasks.async_task(Katello::Repository::CapsuleSync, repository) if Setting[:foreman_proxy_content_auto_sync]
61
+ if input[:sync_capsule] && (Setting[:foreman_proxy_content_auto_sync])
62
+ ForemanTasks.async_task(Katello::Repository::CapsuleSync, repository)
63
63
  end
64
64
  output[:upload_results] = results_to_json(input[:upload_results])
65
65
  rescue ::Katello::Errors::CapsuleCannotBeReached # skip any capsules that cannot be connected to
@@ -92,10 +92,8 @@ module Actions
92
92
  json_results << {:type => 'file'}
93
93
  end
94
94
  end
95
- unless json_results.size
96
- if result[:content_unit_href]
97
- json_results << {:type => 'file'}
98
- end
95
+ if !json_results.size && (result[:content_unit_href])
96
+ json_results << {:type => 'file'}
99
97
  end
100
98
  end
101
99
  json_results
@@ -3,6 +3,7 @@ module Actions
3
3
  module Repository
4
4
  class MetadataGenerate < Actions::EntryAction
5
5
  def plan(repository, options = {})
6
+ return if repository.root.is_container_push && repository.library_instance?
6
7
  action_subject(repository)
7
8
  repository.check_ready_to_act!
8
9
  source_repository = options.fetch(:source_repository, nil)
@@ -92,7 +92,7 @@ module Actions
92
92
  # match the ACS content type and have a non-nil URL
93
93
  product = repository.product
94
94
  repo_content_types = Set.new
95
- product.repositories.each do |test_repo|
95
+ product.acs_compatible_repositories.each do |test_repo|
96
96
  # we need to check id because test_repo will still contain the old, non-nil url
97
97
  repo_content_types.add(test_repo.content_type) if (repository.id != test_repo.id) && test_repo.url.present?
98
98
  end
@@ -110,11 +110,11 @@ module Actions
110
110
  end
111
111
 
112
112
  def create_acs?(old_url, new_url)
113
- old_url.nil? && new_url.present?
113
+ (old_url.nil? || old_url.start_with?('uln')) && new_url.present? && !new_url.start_with?('uln')
114
114
  end
115
115
 
116
116
  def delete_acs?(old_url, new_url)
117
- old_url.present? && new_url.nil?
117
+ old_url.present? && (new_url.nil? || new_url.start_with?('uln'))
118
118
  end
119
119
  end
120
120
  end
@@ -6,8 +6,7 @@ module Actions
6
6
  _("Enable")
7
7
  end
8
8
 
9
- def plan(product, content, substitutions, override_url: nil,
10
- override_arch: nil)
9
+ def plan(product, content, substitutions, opts = {})
11
10
  mapper = ::Katello::Candlepin::RepositoryMapper.new(product,
12
11
  content,
13
12
  substitutions)
@@ -16,10 +15,10 @@ module Actions
16
15
  fail ::Katello::Errors::ConflictException, _("The repository is already enabled")
17
16
  end
18
17
  repository = mapper.build_repository
19
- repository.root.arch = override_arch if override_arch.present?
20
- if override_url
21
- repository.root.url = override_url
22
- repository.root.download_policy = ::Katello::RootRepository::DOWNLOAD_IMMEDIATE if URI(override_url).scheme == 'file'
18
+ repository.root.arch = opts[:override_arch] if opts[:override_arch].present?
19
+ if opts[:override_url]
20
+ repository.root.url = opts[:override_url]
21
+ repository.root.download_policy = ::Katello::RootRepository::DOWNLOAD_IMMEDIATE if URI(opts[:override_url]).scheme == 'file'
23
22
  end
24
23
  plan_action(Repository::Create, repository, clone: false)
25
24
  action_subject(repository)
@@ -28,9 +28,10 @@ module Actions
28
28
  def capsule_id(args)
29
29
  capsule_id = nil
30
30
  args.each do |arg|
31
- if arg.is_a? SmartProxy
31
+ case arg
32
+ when SmartProxy
32
33
  capsule_id = arg.id
33
- elsif arg.is_a? Hash
34
+ when Hash
34
35
  capsule_id = arg[:capsule_id] || arg[:smart_proxy_id]
35
36
  end
36
37
  break if capsule_id
@@ -96,10 +96,9 @@ module Actions
96
96
  def transform_task_response(response)
97
97
  response = [] if response.nil?
98
98
  response = [response] unless response.is_a?(Array)
99
- response = response.map do |task|
99
+ response.map do |task|
100
100
  task.as_json
101
101
  end
102
- response
103
102
  end
104
103
 
105
104
  def check_for_errors
@@ -166,8 +165,7 @@ module Actions
166
165
  def get_task_label(name, href)
167
166
  name = name.split('.').last if name
168
167
  href = href.split('-').last[0...-1] if href
169
- label = "%s (ID: %s)" % [name, href]
170
- label
168
+ "%s (ID: %s)" % [name, href]
171
169
  end
172
170
  end
173
171
  end
@@ -17,8 +17,7 @@ module Actions
17
17
  if repository
18
18
  [repository]
19
19
  else
20
- repositories = smart_proxy_helper.repositories_available_to_capsule(environment, content_view).by_rpm_count
21
- repositories
20
+ smart_proxy_helper.repositories_available_to_capsule(environment, content_view).by_rpm_count
22
21
  end
23
22
  end
24
23
  end
@@ -23,7 +23,7 @@ module Actions
23
23
  plan_action(Actions::Pulp3::Repository::SaveVersion, target_repo, tasks: action.output[:pulp_tasks])
24
24
  copy_actions = []
25
25
  #since we're creating a new version from the first repo, start copying at the 2nd
26
- source_repositories[1..-1].each do |source_repo|
26
+ source_repositories[1..].each do |source_repo|
27
27
  # TODO: In a future refactor, can :copy_all be utilized? Filters should not be needed in this code segment.
28
28
  copy_actions << plan_action(Actions::Pulp3::Repository::CopyContent, source_repo, smart_proxy, target_repo,
29
29
  filter_ids: filter_ids, solve_dependencies: solve_dependencies,
@@ -32,6 +32,10 @@ module Actions
32
32
  plan_action(Actions::Pulp3::Repository::SaveVersion, target_repo, tasks: copy_actions.last.output[:pulp_tasks])
33
33
  end
34
34
  end
35
+ elsif source_repositories.first.root.is_container_push
36
+ copy_action = plan_action(Actions::Pulp3::Repository::CopyContent, source_repositories.first, smart_proxy, target_repo,
37
+ copy_all: true)
38
+ plan_action(Actions::Pulp3::Repository::SaveVersion, target_repo, tasks: copy_action.output[:pulp_tasks])
35
39
  else
36
40
  plan_self(source_version_repo_id: source_repositories.first.id,
37
41
  target_repo_id: target_repo.id)
@@ -9,10 +9,13 @@ module Actions
9
9
  plan_action(Actions::Pulp3::Repository::DeleteDistributions, repository.id, smart_proxy)
10
10
 
11
11
  if repository.content_view.default?
12
- #we're deleting the library instance, so just delete the whole pulp3 repo
12
+ # Container push repositories must be deleted through the distribution
13
+ return if repository.root.is_container_push
14
+
15
+ # We're deleting the library instance, so just delete the whole pulp3 repo
13
16
  plan_action(Actions::Pulp3::Repository::Delete, repository.id, smart_proxy)
14
17
  elsif repository.environment.nil?
15
- #we're deleting the archived instance, so delete the version
18
+ # We're deleting the archived instance, so delete the version
16
19
  plan_action(Actions::Pulp3::Repository::DeleteVersion, repository, smart_proxy)
17
20
  end
18
21
  end
@@ -20,11 +20,9 @@ module Actions
20
20
  end
21
21
 
22
22
  output[:publication_provided] = false
23
- if input[:tasks].present?
24
- if (publication_href = ::Katello::Pulp3::Task.publication_href(input[:tasks]))
25
- repo.update(:publication_href => publication_href)
26
- output[:publication_provided] = true
27
- end
23
+ if input[:tasks].present? && (publication_href = ::Katello::Pulp3::Task.publication_href(input[:tasks]))
24
+ repo.update(:publication_href => publication_href)
25
+ output[:publication_provided] = true
28
26
  end
29
27
 
30
28
  if version_href
@@ -259,13 +259,9 @@ module Katello
259
259
  labels = 'label ^ (Actions::Katello::Host::Erratum::Install, Actions::Katello::Host::Erratum::ApplicableErrataInstall)'
260
260
  select = 'foreman_tasks_tasks.*'
261
261
 
262
- if Katello.with_remote_execution?
263
- new_labels = 'label = Actions::RemoteExecution::RunHostJob AND remote_execution_feature.label ^ (katello_errata_install, katello_errata_install_by_search)'
264
- labels = [labels, new_labels].map { |label| "(#{label})" }.join(' OR ')
265
- select += ',template_invocations.id AS template_invocation_id'
266
- else
267
- select += ',NULL AS template_invocation_id'
268
- end
262
+ new_labels = 'label = Actions::RemoteExecution::RunHostJob AND remote_execution_feature.label ^ (katello_errata_install, katello_errata_install_by_search)'
263
+ labels = [labels, new_labels].map { |label| "(#{label})" }.join(' OR ')
264
+ select += ',template_invocations.id AS template_invocation_id'
269
265
 
270
266
  search = [search_up_to, search_since, search_result, "state = stopped", labels].compact.join(' and ')
271
267
 
@@ -302,8 +298,8 @@ module Katello
302
298
  current_erratum_errata_type = current_erratum[1]
303
299
  current_erratum_issued = current_erratum.last
304
300
 
305
- if filter_errata_type != 'all'
306
- next unless filter_errata_type == current_erratum_errata_type
301
+ if filter_errata_type != 'all' && !(filter_errata_type == current_erratum_errata_type)
302
+ next
307
303
  end
308
304
 
309
305
  hash = {
@@ -134,6 +134,7 @@ module Katello
134
134
  end
135
135
 
136
136
  class UpstreamCandlepinError < CandlepinError; end
137
+
137
138
  class UpstreamConsumerGone < StandardError
138
139
  def message
139
140
  _("The manifest doesn't exist on console.redhat.com. " \
@@ -8,6 +8,7 @@ module Katello
8
8
 
9
9
  class RestClientException < StandardError
10
10
  attr_reader :service_code, :code
11
+
11
12
  def initialize(params)
12
13
  super params[:message]
13
14
  @service_code = params[:service_code]
@@ -24,7 +24,7 @@ module Katello
24
24
  def lazy_accessor(*args)
25
25
  options = args.extract_options!
26
26
  @lazy_attributes = [] if @lazy_attributes.nil?
27
- @lazy_attributes = @lazy_attributes.concat args
27
+ @lazy_attributes.concat args
28
28
  @lazy_attributes_options ||= {}
29
29
  fail ArgumentError, "Attribute names must be symbols" if args.any? { |attribute| !attribute.is_a?(Symbol) }
30
30
  redefined_attr = args.find { |attribute| instance_methods.include?(attribute.to_s) }
@@ -7,11 +7,6 @@ module Katello
7
7
  response = get('/candlepin/status').body
8
8
  JSON.parse(response).with_indifferent_access
9
9
  end
10
-
11
- def distributor_versions
12
- response = get("/candlepin/distributor_versions").body
13
- JSON.parse(response)
14
- end
15
10
  end
16
11
  end
17
12
  end
@@ -65,7 +65,7 @@ module Katello
65
65
  response = JSON.parse(response_json).with_indifferent_access
66
66
  if wait_until_complete && response['state'] == 'CREATED'
67
67
  while !response['state'].nil? && response['state'] != 'FINISHED' && response['state'] != 'ERROR'
68
- path = join_path('candlepin', response['statusPath'][1..-1])
68
+ path = join_path('candlepin', response['statusPath'][1..])
69
69
  response_json = self.get(path, self.default_headers)
70
70
  response = JSON.parse(response_json).with_indifferent_access
71
71
  end
@@ -13,8 +13,7 @@ module Katello
13
13
  end
14
14
 
15
15
  def create(owner_key, attrs)
16
- pool = self.post("/candlepin/owners/#{owner_key}/pools", attrs.to_json, self.default_headers).body
17
- pool
16
+ self.post("/candlepin/owners/#{owner_key}/pools", attrs.to_json, self.default_headers).body
18
17
  end
19
18
 
20
19
  def find(pool_id)
@@ -11,7 +11,7 @@ module Katello
11
11
  end
12
12
 
13
13
  def get(id, upstream)
14
- url = API_URL
14
+ url = ENV['REDHAT_RHSM_API_URL'] || API_URL
15
15
  response = Resources::Candlepin::UpstreamConsumer.start_upstream_export("#{url}#{path(id)}", upstream['idCert']['cert'],
16
16
  upstream['idCert']['key'], nil)
17
17
  job = JSON.parse(response)
@@ -104,9 +104,10 @@ module Katello
104
104
  # very old infrastructure for now, but that was considered better than having an insecure default.
105
105
  net.min_version = OpenSSL::SSL::TLS1_2_VERSION
106
106
 
107
- if (@options[:verify_ssl] == false) || (@options[:verify_ssl] == OpenSSL::SSL::VERIFY_NONE)
107
+ case @options[:verify_ssl]
108
+ when false, OpenSSL::SSL::VERIFY_NONE
108
109
  net.verify_mode = OpenSSL::SSL::VERIFY_NONE
109
- elsif @options[:verify_ssl].is_a? Integer
110
+ when Integer
110
111
  net.verify_mode = @options[:verify_ssl]
111
112
  net.verify_callback = lambda do |preverify_ok, ssl_context|
112
113
  if !preverify_ok || ssl_context.error != 0
@@ -22,7 +22,7 @@ module Katello
22
22
  if @uri.scheme == 'file'
23
23
  crawl_file_path(uri(resume_point))
24
24
  elsif %w(http https).include?(@uri.scheme)
25
- spidr_crawl_pages(resume_point)
25
+ spidr_crawl_pages(uri(resume_point))
26
26
  end
27
27
  end
28
28
 
@@ -54,6 +54,7 @@ module Katello
54
54
  end
55
55
 
56
56
  def spidr_crawl_pages(url)
57
+ url = url.to_s
57
58
  user, password = @upstream_username, @upstream_password
58
59
  Spidr.site(url, proxy: spidr_proxy_details) do |spider|
59
60
  spider.authorized.add(url, user, password) if user && password
@@ -85,8 +86,7 @@ module Katello
85
86
  # * link ends with '/' so it should be a directory
86
87
  # * link doesn't end with '/Packages/', as this increases
87
88
  # processing time and memory usage considerably
88
-
89
- return url.hostname == @uri.hostname && !@crawled.include?(url.to_s) &&
89
+ return url.path.starts_with?(@uri.path) && url.hostname == @uri.hostname && !@crawled.include?(url.to_s) &&
90
90
  url.path.ends_with?('/') && !url.path.ends_with?('/Packages/')
91
91
  end
92
92
  end
@@ -1,8 +1,8 @@
1
1
  module Katello
2
2
  module Util
3
3
  class CdnVarSubstitutor
4
- attr_reader :good_listings
5
- attr_reader :bad_listings
4
+ attr_reader :good_listings, :bad_listings
5
+
6
6
  # cdn_resource - an object providing access to CDN. It has to
7
7
  # provide a get method that takes a path (e.g.
8
8
  # /content/rhel/6.2/listing) and returns the body response)
@@ -68,7 +68,9 @@ module Katello
68
68
 
69
69
  futures.each do |future|
70
70
  resolved << future.value
71
- Rails.logger.error("Failed at scanning for repository: #{future.reason}") if future.rejected?
71
+ if future.rejected?
72
+ fail Errors::CdnSubstitutionError, "Failed at scanning for repository: #{future.reason}"
73
+ end
72
74
  end
73
75
  end
74
76
 
@@ -13,7 +13,8 @@ module Katello
13
13
  options[:prefix_keys] ||= []
14
14
  options[:prefix] ||= '_'
15
15
 
16
- if obj.is_a? Hash
16
+ case obj
17
+ when Hash
17
18
 
18
19
  ostructized_hash = {}
19
20
  obj.each do |key, value|
@@ -31,7 +32,7 @@ module Katello
31
32
  end
32
33
  return OpenStruct.new ostructized_hash
33
34
 
34
- elsif obj.is_a? Array
35
+ when Array
35
36
 
36
37
  return obj.map { |r| ostructize(r, options) }
37
38
 
@@ -29,11 +29,12 @@ module Katello
29
29
 
30
30
  def get_pulp_filter_type(type)
31
31
  filter_type = type.downcase
32
- if filter_type == "bugfix"
32
+ case filter_type
33
+ when "bugfix"
33
34
  return ::Katello::Erratum::BUGZILLA
34
- elsif filter_type == "enhancement"
35
+ when "enhancement"
35
36
  return ::Katello::Erratum::ENHANCEMENT
36
- elsif filter_type == "security"
37
+ when "security"
37
38
  return ::Katello::Erratum::SECURITY
38
39
  end
39
40
  end
@@ -75,8 +75,8 @@ module Katello
75
75
  vrea = [package[:version], package[:release]].compact.join('-')
76
76
  vrea = vrea + '.' + package[:arch] unless package[:arch].nil?
77
77
  vrea = vrea + '.' + package[:suffix] unless package[:suffix].nil?
78
- unless package[:epoch].nil?
79
- vrea = package[:epoch] + ':' + vrea if package[:epoch].to_i != 0 || include_zero_epoch
78
+ if !package[:epoch].nil? && (package[:epoch].to_i != 0 || include_zero_epoch)
79
+ vrea = package[:epoch] + ':' + vrea
80
80
  end
81
81
  vrea
82
82
  end
@@ -135,7 +135,7 @@ module Katello
135
135
  end
136
136
 
137
137
  def self.valid_package_characters
138
- /[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-\.\_\+\,]+/
138
+ /[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-._+,]+/
139
139
  end
140
140
 
141
141
  def self.setup_shared_unique_filter(repoids, search_mode, search_results)
@@ -25,7 +25,7 @@ module Katello
25
25
  def substitutions_needed
26
26
  # e.g. if content_url = "/content/dist/rhel/server/7/$releasever/$basearch/kickstart"
27
27
  # return ['releasever', 'basearch']
28
- split_path.map { |word| word.start_with?('$') ? word[1..-1] : nil }.compact
28
+ split_path.map { |word| word.start_with?('$') ? word[1..] : nil }.compact
29
29
  end
30
30
 
31
31
  def substitutable?
@@ -19,9 +19,10 @@ module Katello
19
19
  end
20
20
 
21
21
  def as(type)
22
- if type == :csv
22
+ case type
23
+ when :csv
23
24
  as_csv(transform_data)
24
- elsif type == :text
25
+ when :text
25
26
  as_text(transform_data)
26
27
  end
27
28
  end
@@ -63,7 +63,7 @@ module Katello
63
63
  self.parts.each_with_index do |part, i|
64
64
  a << @match.parts[i] if part[0] == ':'
65
65
  end
66
- a << @match.ext[1..-1] if self.ext[1] == ':'
66
+ a << @match.ext[1..] if self.ext[1] == ':'
67
67
  a
68
68
  end
69
69
  alias_method :vars, :variables
@@ -3,11 +3,12 @@ module Katello
3
3
  class AlternateContentSourcePathValidator < ActiveModel::EachValidator
4
4
  def validate_each(record, attribute, value)
5
5
  if value
6
- if attribute == :base_url
6
+ case attribute
7
+ when :base_url
7
8
  unless AlternateContentSourcePathValidator.validate_base_url(value)
8
9
  record.errors[attribute] << N_("%s is not a valid path") % value
9
10
  end
10
- elsif attribute == :subpaths
11
+ when :subpaths
11
12
  unless AlternateContentSourcePathValidator.validate_subpaths(value)
12
13
  record.errors[attribute] << N_('All subpaths must have a slash at the end and none at the front')
13
14
  end
@@ -16,7 +17,7 @@ module Katello
16
17
  end
17
18
 
18
19
  def self.validate_base_url(base_url)
19
- base_url =~ /\A#{URI::DEFAULT_PARSER.make_regexp}\z/
20
+ base_url =~ /\A(?!uln:\/\/)(#{URI::DEFAULT_PARSER.make_regexp})\z/
20
21
  end
21
22
 
22
23
  # Subpaths must have a slash at the end and none at the front: 'path/'
@@ -2,13 +2,11 @@ module Katello
2
2
  module Validators
3
3
  class AlternateContentSourceProductsValidator < ActiveModel::EachValidator
4
4
  def validate_each(record, attribute, value)
5
- if value
6
- if attribute == :product_id
7
- product = ::Katello::Product.find(value)
8
- content_type = record.alternate_content_source.content_type
9
- if product.repositories.with_type(content_type).has_url.empty?
10
- record.errors.add(attribute, _("%{name} has no %{type} repositories with upstream URLs to add to the alternate content source.") % { name: product.name, type: content_type })
11
- end
5
+ if value && (attribute == :product_id)
6
+ product = ::Katello::Product.find(value)
7
+ content_type = record.alternate_content_source.content_type
8
+ if product.acs_compatible_repositories.with_type(content_type).empty?
9
+ record.errors.add(attribute, _("%{name} has no %{type} repositories with upstream URLs to add to the alternate content source.") % { name: product.name, type: content_type })
12
10
  end
13
11
  end
14
12
  end
@@ -8,7 +8,7 @@ module Katello
8
8
  end
9
9
 
10
10
  def self.validate_name(name)
11
- if name.empty? || name.length > 255 || !/\A([a-z0-9]+[a-z0-9\-\_\.]*)+(\/[a-z0-9]+[a-z0-9\-\_\.]*)*\z/.match?(name)
11
+ if name.empty? || name.length > 255 || !/\A([a-z0-9]+[a-z0-9\-_.]*)+(\/[a-z0-9]+[a-z0-9\-_.]*)*\z/.match?(name)
12
12
  return false
13
13
  end
14
14
  true
@@ -13,8 +13,8 @@ module Katello
13
13
  end
14
14
 
15
15
  def self.validate_length(record, attribute, value, min_length = 1)
16
- if value
17
- record.errors[attribute] << _("must contain at least %s character") % min_length unless value.length >= min_length
16
+ if value && !(value.length >= min_length)
17
+ record.errors[attribute] << _("must contain at least %s character") % min_length
18
18
  end
19
19
  end
20
20
  end
@@ -6,8 +6,8 @@ module Katello
6
6
  end
7
7
 
8
8
  def self.validate_trailing_space(record, attribute, value)
9
- if value
10
- record.errors[attribute] << _("must not contain leading or trailing white spaces.") unless value.strip == value
9
+ if value && !(value.strip == value)
10
+ record.errors[attribute] << _("must not contain leading or trailing white spaces.")
11
11
  end
12
12
  end
13
13
  end
@@ -7,8 +7,8 @@ module Katello
7
7
  # this is because in v1.0 we want
8
8
  # prior to have only one child (unless its the Library)
9
9
  ancestor = record.prior
10
- if ancestor && !ancestor.library?
11
- record.errors[:prior] << _("prior environment can only have one child") if ancestor.successors.count == 1 && !ancestor.successors.include?(record)
10
+ if ancestor && !ancestor.library? && (ancestor.successors.count == 1 && !ancestor.successors.include?(record))
11
+ record.errors[:prior] << _("prior environment can only have one child")
12
12
  end
13
13
  end
14
14
  end
@@ -12,10 +12,8 @@ module Katello
12
12
  def unique_attribute?(record, attribute, value)
13
13
  unique = true
14
14
 
15
- if record.provider && !record.provider.redhat_provider? && record.send("#{attribute}_changed?")
16
- if Product.in_org(record.provider.organization).where(attribute => value).exists?
17
- unique = false
18
- end
15
+ if record.provider && !record.provider.redhat_provider? && record.send("#{attribute}_changed?") && Product.in_org(record.provider.organization).where(attribute => value).exists?
16
+ unique = false
19
17
  end
20
18
 
21
19
  unique
@@ -182,12 +182,10 @@ module Katello
182
182
  end
183
183
 
184
184
  def validate_destroyable!
185
- unless organization.being_deleted?
186
- if Parameter.where(name: 'kt_activation_keys').pluck(:value).any? { |value| value.split(",").include?(name) }
187
- fail _("This activation key is associated to one or more Hosts/Hostgroups. "\
188
- "Search and unassociate Hosts/Hostgroups using params.kt_activation_keys ~ \"%{name}\" "\
189
- "before deleting." % {name: name})
190
- end
185
+ if !organization.being_deleted? && Parameter.where(name: 'kt_activation_keys').pluck(:value).any? { |value| value.split(",").include?(name) }
186
+ fail _("This activation key is associated to one or more Hosts/Hostgroups. "\
187
+ "Search and unassociate Hosts/Hostgroups using params.kt_activation_keys ~ \"%{name}\" "\
188
+ "before deleting." % {name: name})
191
189
  end
192
190
  true
193
191
  end
@@ -54,7 +54,7 @@ module Katello
54
54
  validates :content_type, inclusion: {
55
55
  in: ->(_) { RepositoryTypeManager.defined_repository_types.keys & CONTENT_TYPES },
56
56
  allow_blank: false,
57
- message: ->(_, _) { _("is not allowed for ACS. Must be one of the following: %s") % (RepositoryTypeManager.defined_repository_types.keys & CONTENT_TYPES).join(',') }
57
+ message: ->(_, _) { _("is not allowed for ACS. Must be one of the following: %s") % (RepositoryTypeManager.defined_repository_types.keys & CONTENT_TYPES).sort.join(',') }
58
58
  }
59
59
  validates :content_type, if: -> { rhui? }, inclusion: {
60
60
  in: [::Katello::Repository::YUM_TYPE],
@@ -6,8 +6,7 @@ module Katello
6
6
 
7
7
  module ClassMethods
8
8
  def resolvable
9
- relation = joins_authorized(::Host::Managed, :edit_hosts)
10
- relation
9
+ joins_authorized(::Host::Managed, :edit_hosts)
11
10
  end
12
11
  end
13
12
  end
@@ -19,7 +19,7 @@ module Katello
19
19
 
20
20
  def deletable?
21
21
  promoted_repos = repositories.select { |repo| repo.promoted? }
22
- authorized?(:destroy_products) && promoted_repos.empty?
22
+ authorized?(:destroy_products) && (promoted_repos.empty? || Setting[:delete_repo_across_cv])
23
23
  end
24
24
 
25
25
  module ClassMethods
@@ -64,7 +64,7 @@ module Katello
64
64
  sorted_substitutions = substitutions.sort_by { |k, _| k.to_s }.map(&:last)
65
65
  repo_name_parts = [content.name,
66
66
  sorted_substitutions].flatten.compact
67
- repo_name_parts.join(" ").gsub(/[^a-z0-9\-\._ ]/i, "")
67
+ repo_name_parts.join(" ").gsub(/[^a-z0-9\-._ ]/i, "")
68
68
  end
69
69
 
70
70
  def path
@@ -83,7 +83,7 @@ module Katello
83
83
 
84
84
  def feed_url
85
85
  return if product.organization.cdn_configuration.export_sync?
86
- @feed_url ||= if product.cdn_resource&.respond_to?(:repository_url)
86
+ @feed_url ||= if product.cdn_resource.respond_to?(:repository_url)
87
87
  product.cdn_resource.repository_url(content_label: content.label, arch: arch, major: version[:major], minor: version[:minor])
88
88
  else
89
89
  product.repo_url(path)